Ruby on Rails - 只有当一个属性被更改时才带有条件的before_action

时间:2017-08-19 12:26:32

标签: ruby ruby-on-rails-4 model before-filter

在我的应用程序中,Post模型具有属性title& price等。

before_action发生变化时,我有2个title我想要 price更改后的其他

class Post < ActiveRecord::Base

  before_update :do_something_with_title
  before_update :do_something_with_price

  def do_something_with_title
    // my code for title here
  end

  def do_something_with_price?
    // my code for price here
  end

我知道我可以使用changed?before_action if: post条件,但这会在title中的任何属性发生变化时适用,而不仅仅是{{1} }&amp; price已发生变化。

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用title_changed?price_changed?

class Post < ActiveRecord::Base    
  before_update :do_something_with_title, if: :title_changed?
  before_update :do_something_with_price, if: :price_changed?
end

答案 1 :(得分:0)

您可以使用

class Post < ActiveRecord::Base    
  before_update :do_something_with_title, if: :title_changed?
  before_update :do_something_with_price, if: :price_changed?
  ...
end

class Post < ActiveRecord::Base    
  before_update { |post| post.do_something_with_title if post.title_changed? }
  before_update { |post| post.do_something_with_price if post.price_changed? }
  ...
end