我有一个我想要添加到客户端的覆盖计划。新客户应默认使用具有密钥1的临时覆盖计划。
使用Rails 5.0,我知道如何将默认值添加到常规列,但如何将默认值添加到一对一关联?我是否需要指定对象或仅指定键的值?
答案 0 :(得分:1)
在我看来,最好不要在迁移中硬编码foreign_key值。
您可以执行以下操作,而不是在迁移中设置默认值:
before_create :set_default_plan
def set_default_plan
plan = Plan.find_by(name: 'default plan name')
self.plan = plan if plan.present?
end
答案 1 :(得分:0)
运行rails generate
rails g migration AddCoverageToClients coverage:reference
并在子coverages
表中创建数据,将外键的值指定为默认值。
class AddCoverageToClients < ActiveRecord::Migration[5.0]
def change
add_reference :clients, :coverage, foreign_key: true, null: false, default: 1
end
end
答案 2 :(得分:0)
您应该按照@Ravi Teja Dandu的建议在模型中设置未来数据的默认值
但是,在添加引用时,您可以使用这种迁移方式,通过三步过程使您可以使用外键设置非空引用
class AddCategoryToMenuItems < ActiveRecord::Migration[5.2]
def change
add_reference :menu_items, :drink_category, foreign_key: true, index: true, null: true
reversible do |change|
change.up do
first_category = DrinkCategory.first
MenuItem.find_each do |item|
item.drink_category = first_category
item.save
end
end
end
change_column_null :menu_items, :drink_category_id, false
end
end