Ruby to_json:方法参数

时间:2010-04-30 15:22:06

标签: ruby-on-rails render-to-response

我在对象上使用to_json方法,并尝试使:methods参数起作用。我的模型(Drop)上有一个名为is_favorited_by_user?的方法。此方法接受current_user的参数,然后检查用户是否收到了丢弃。如何通过to_json方法传递此参数。

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

2 个答案:

答案 0 :(得分:44)

您可以在模型中添加current_user属性并在执行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?)

答案 1 :(得分:4)

方法to_json所采用的并不是那些采用参数的方法,而只是“getter”方法。 (通常是根据您的数据库属性创建的。)

请参阅此处的示例,无传递参数:

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

如果你想做一些自定义的事情,你需要创建一个方法来构建你想要的信息的哈希值,然后将那个哈希值转换为json。