Rails 2.1 to_json with include和方法抛出参数错误

时间:2012-02-25 05:49:14

标签: ruby-on-rails json

我有一个rails 2.1 app,订单属于group。 我想用json返回订单,包括组(特别是只有一个表列),以及订单的一些方法。

我在show方法中有这个代码:

@order = Order.find(params[:id])   
render :json => @order.to_json(:include => { :group => { :only => :article_cap }}, :methods => [:fee, :get_url], :only => [:id, :group_id])

之前,我不需要这个小组,只使用'方法'和'只'工作正常。现在我需要'包含'该组,我收到此错误:

  

ArgumentError(参数数量错误(0表示1)):   /home/name/.rvm/gems/ruby-1.8.7-p352@code/gems/activerecord-2.1.0/lib/active_record/associations/association_proxy.rb:177:in`get_url'

     

...

如果我只使用include或仅使用方法,它可以正常工作,但如果我同时执行两种方法,则不行。有什么想法吗?

编辑:我现在看到它试图在相关的包含组模型上调用get_url(它具有与顺序相同的方法,但需要传递一些东西)。我以为你必须把它写成:

:include => { :group => { :methods => :get_url } }

这个问题。我似乎无法让它包含来自@order的方法。

1 个答案:

答案 0 :(得分:1)

在思考一下rails试图做什么之后(在包含的模型而不是主模型上访问方法),我意识到我需要做的就是为包含的模型添加一些方法(即使我什么都不添加)。看看这个:

render :json => @order.to_json(
  :methods => [:get_url, :link_expired, etc...],
  :include => { :group => { :methods => [], :only => :article_cap }},
  :only => [:id, :group_id]
)

我为包含的组添加了一个空数组方法,rails发现我添加的方法不能用于组。我没有在任何地方看到过这个,很奇怪没有人有这个问题;也许这是预期的行为。希望这有助于其他人!