[英]How do I set a default value based on an associated model in Rails?
我有一個名為 userWorkshop 的userWorkshop
它引用了User
和Workshop
。
Workshops
有一個價格欄。
userWorkshops
有一個override_price列。
我希望UserWorkShop
的override_price列的默認值基於與之關聯的Workshop
的price列。
我想在我的 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.