如何根据 Rails 中的关联模型设置默认值?
How do I set a default value based on an associated model in Rails?
我有一个名为 userWorkshop
的模型,它同时引用了 User
和 Workshop
。
Workshops
有一个 价格 列。
userWorkshops
有一个 override_price 列。
我希望 UserWorkShop
的 override_price 列的默认值基于 价格 它关联的 Workshop
列。
我想在我的 ActiveRecord 迁移中设置这个值。我想它可能看起来像这样:
def change
add_column :userWorkshops, :override_price, :float, default: "self.workshop.price"
end
知道正确的方法吗?
我不确定是否有办法在一次迁移中完成所有这些。我会利用 before_initialize 回调。
class UserWorkshop < ApplicationRecord
has_many :users
belongs_to :workshop
before_initialize :initial_values, unless: persisted?
def initial_values
self.override_price = workshop.price
end
end
这样做的好处是,您可以轻松地将 override_price 更改为这样的 self.override_price = workshop.price/2
,从而为他们提供 50% 的折扣或类似的任何其他优惠。
然后在迁移中,处理旧数据。
def change
UserWorkshop.find_each do |uw|
uw.override_price = uw.workshop.price
uw.save
end
end
我有一个名为 userWorkshop
的模型,它同时引用了 User
和 Workshop
。
Workshops
有一个 价格 列。
userWorkshops
有一个 override_price 列。
我希望 UserWorkShop
的 override_price 列的默认值基于 价格 它关联的 Workshop
列。
我想在我的 ActiveRecord 迁移中设置这个值。我想它可能看起来像这样:
def change
add_column :userWorkshops, :override_price, :float, default: "self.workshop.price"
end
知道正确的方法吗?
我不确定是否有办法在一次迁移中完成所有这些。我会利用 before_initialize 回调。
class UserWorkshop < ApplicationRecord
has_many :users
belongs_to :workshop
before_initialize :initial_values, unless: persisted?
def initial_values
self.override_price = workshop.price
end
end
这样做的好处是,您可以轻松地将 override_price 更改为这样的 self.override_price = workshop.price/2
,从而为他们提供 50% 的折扣或类似的任何其他优惠。
然后在迁移中,处理旧数据。
def change
UserWorkshop.find_each do |uw|
uw.override_price = uw.workshop.price
uw.save
end
end