views:

389

answers:

2

I am using the to_json method on an object, and trying to get the :methods argument to work. I have a method on my model (Drop) called is_favorited_by_user?. This method takes an argument of the current_user, and then checks to see if the drop is favorited by the user. How can I pass this argument through the to_json method.

render :json => @drops.to_json(:methods => :is_favorited_by_user?(current_user))
+1  A: 

The methods to_json takes aren't intended to be ones that take arguments, but just "getter" methods. (Typically the ones created based on your db attributes.)

See examples here, none pass arguments:

http://apidock.com/rails/ActiveRecord/Serialization/to_json

If you want to do something custom, you'll need to create a method that builds up the hash of info you want, then convert that hash to json.

fig
Is there a way that I can get the current_user variable within my Model, so I don't need to pass the argument?
James Finley
+1  A: 

You can add current_user attribute to your model and set it before executing to_json

  attr_accessor :current_user

  def is_favorited_by_user?(user=nil)
    user ||= current_user
    # rest of your code
  end


@drops.current_user = current_user
render :json => @drops.to_json(:methods => :is_favorited_by_user?)
Voyta
That worked! Thanks, Voyta!
James Finley