簡體   English   中英

如何根據 Rails 中關聯的 model 設置默認值?

[英]How do I set a default value based on an associated model in Rails?

我有一個名為 userWorkshop 的userWorkshop它引用了UserWorkshop

Workshops有一個價格欄。

userWorkshops有一個override_price列。

我希望UserWorkShopoverride_price列的默認值基於與之關聯的Workshopprice列。

我想在我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM