Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you create a callback with an if statement for multiple changed fields in Ruby on Rails?

I would like to create a before_save callback that only gets run if there have been changes to any (but not necessarily all) of the three fields (street, city, state). How do you do this? Thanks

user.rb

class User
  before_save :run_test_method, :if => street_changed?

  ...
end
like image 907
perseverance Avatar asked Oct 15 '12 03:10

perseverance


1 Answers

Option One

You could create a method like:

def ok_to_run_test_method?
  street_changed? || something_changed? || something_else_changed?
end

and then use:

before_save :run_test_method, :if => :ok_to_run_test_method?

Note how :ok_to_run_test_method? is a symbol. Not sure if it was a typo or not but in your question you are actually calling a class method street_changed?.

Option Two

Modernise your callbacks a little bit and use the block-style syntax:

before_save do
  if street_changed? || something_changed? || something_else_changed?
    # whatever you currently have in #run_test_method
  end
end
like image 56
tristanm Avatar answered Sep 28 '22 04:09

tristanm