28

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

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

2 回答 2

49

您可以在模型中添加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?)
于 2010-04-30T15:49:29.597 回答
4

这些方法to_json并不打算成为那些接受参数的方法,而只是“getter”方法。(通常是根据您的数据库属性创建的。)

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

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

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

于 2010-04-30T15:29:55.903 回答