如何让模型字段继承自另一个模型?

时间:2014-06-26 19:13:22

标签: ruby-on-rails ruby model money-rails

我使用money-rails gem来兑换货币。我有两个模型:用户和目标模型。 User模型有一个:currency字段,money-rails使用该字段为用户设置货币。目标模型还有一个:currency字段。就目前而言,当用户创建新目标时,控制器会将该目标的货币设置为与用户模型中存储的货币相同的值。

如下:

if @goal.save
  @goal.update_attribute(:currency, current_user.currency)
  redirect_to goals_path, notice: "Goal created!"
else
  render '/goals/new'
end

但是,如果用户返回并通过编辑用户模型更改其货币,则仅更改此后创建的目标的货币。如何设置它以便在用户更改其货币时更改所有模型中使用的货币?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

一种方法是在User模型中使用after_save回调将更改级联到所有用户的目标:

class User < ActiveRecord::Base
  has_many :goals

  after_save :cascade_currency_changes

  def cascade_currency_changes
    if currency_changed?
      goals.update_all currency: currency
    end
  end
end

答案 1 :(得分:0)

另一种方法是从目标模型中删除字段并拥有自定义字段:

class Goal < ActiveRecord::Base
    belongs_to :user
    #....

    def currency
         user.currency
    end
end

所以,没有任何计算,总是:

@goal.currency == @goal.user.currency # => always true