Ruby on rails 添加列的自定义默认值
我正在创建一个迁移,在该迁移中,我向模型添加了一列。由于模型中已经有对象,我想给它们一个默认值。但不同对象的含义将因链接模型中另一个对象的状态而异Ruby on rails 添加列的自定义默认值,ruby-on-rails,migration,default-value,Ruby On Rails,Migration,Default Value,我正在创建一个迁移,在该迁移中,我向模型添加了一列。由于模型中已经有对象,我想给它们一个默认值。但不同对象的含义将因链接模型中另一个对象的状态而异 class Message < ApplicationRecord belongs_to :user end class User < ApplicationRecord has_many :messages end class AddColumnMessageSendType < ActiveRecord::Migrati
class Message < ApplicationRecord
belongs_to :user
end
class User < ApplicationRecord
has_many :messages
end
class AddColumnMessageSendType < ActiveRecord::Migration[5.1]
def change
add_column :mesasges, :send_type, :string, default: ???
end
end
类消息
可以通过使用
if
或在新迁移中添加在def change
和doupdate(发送类型:自定义值)
之后添加每个do
。但是我想知道您是否可以使用默认值:
来进行此操作。谢谢我将创建一个回调来处理前进中的新记录,并为已经存在的记录合并一个rake任务
app/models/message.rb:
class Message < ApplicationRecord
belongs_to :user
before_create :set_send_type
def set_send_type
if something
send_type = 'a'
else
send_type = 'b'
end
end
end
您需要在rake任务中调用消息.save
,因为本例中的set\u send\u type
实际上并不保存到数据库本身。它依赖于运行回调后发生的保存
您应该只需要运行一次rake任务。默认值按照它所说的执行,它是一个预定义的字符串,无法从中引用任何内容。
rake set_send_types: :environment do
Message.all.each do |message|
message.set_send_type
message.save
end
end