Ruby to_json :methods arguments
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开发者_Python百科 this argument through the to_json
method.
render :json => @drops.to_json(:methods => :is_favorited_by_user?(current_user))
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?)
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.
精彩评论