Ruby on rails Ruby to_json:方法参数

Ruby on rails Ruby to_json:方法参数,ruby-on-rails,render-to-response,Ruby On Rails,Render To Response,我正在对象上使用to_json方法,并试图使:methods参数起作用。我在我的模型(Drop)上有一个名为的方法,用户是否喜欢它?。此方法接受当前用户的一个参数,然后检查用户是否喜欢删除。如何将此参数通过传递给\u json方法 render :json => @drops.to_json(:methods => :is_favorited_by_user?(current_user)) 方法to_json不是用来获取参数的方法,而只是“getter”方法。(通常是基于数据库属性

我正在对象上使用
to_json
方法,并试图使
:methods
参数起作用。我在我的模型(Drop)上有一个名为
的方法,用户是否喜欢它?
。此方法接受当前用户的一个参数,然后检查用户是否喜欢删除。如何将此参数通过
传递给\u json
方法

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

方法
to_json
不是用来获取参数的方法,而只是“getter”方法。(通常是基于数据库属性创建的数据库。)

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


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

你可以在你的模型中添加
current\u user
属性,并在执行
到\u 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?)

有没有一种方法可以在我的模型中获取当前的_用户变量,这样我就不需要传递参数?@JamesFinley模型不(也不应该)知道控制器或http请求的状态。当前用户是请求的一部分,由于上述多线程问题,不应以全局方式暴露于模型。它应该仅作为方法参数传递。在索引操作中执行render:json=>Drop.all时,如何扩展此解决方案。我在哪里分配当前用户?
cattr\u访问器:在模型中分配当前用户
,然后在控制器中分配模型。当前用户=当前用户。如果您的环境是多线程的,则将模型分配给类属性将不起作用。您可能正在将某些内容转换为JSON,然后当前用户突然发生变化,现在您的JSON一半用于一个用户,一半用于另一个用户。