微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据 Rails 中的关联模型设置默认值?

如何解决如何根据 Rails 中的关联模型设置默认值?

我有一个名为 userWorkshop 的模型,它同时引用了 UserWorkshop

Workshops一个 price 列。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。