我有一个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的方法。
答案 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发现我添加的方法不能用于组。我没有在任何地方看到过这个,很奇怪没有人有这个问题;也许这是预期的行为。希望这有助于其他人!