将对象传递给不同于自己的控制器

时间:2013-05-15 18:01:02

标签: ruby-on-rails ruby object controller

我正在尝试将对象传递给另一个控制器,以便我可以根据此对象进行排序。 dgroups has_many计划。我试图根据dgroup.id排序我的计划我有以下代码

dgroups视图:

    <% @dgroup.each do |dgroup| %>
<tr>
<td><%= dgroup.dings.map(&:id) %></td>
<td><%= dgroup.id %></td>
<td><%= link_to 'Show Plans', plans_path %></td>
<td><%= link_to 'Edit', edit_dgroup_path(dgroup) %></td>
<td><%= link_to 'Destroy', dgroup, method: :delete, data: { confirm: 'Are you sure?' } %></td>

计划控制器:

    def index
     @dID = Dgroup.find(params[:id])
     @plans = @dID.plans
    respond_to do |format|
     format.html # index.html.erb
     format.json { render json: @plans }
    end
 end

我已尝试从dgroups视图传递diaggroup,例如:

<td><%= link_to 'Show Plans', plans_path(dgroup) %></td>

但是这没用。我不知道为什么,我得到的错误似乎是控制器假设我正在发送一个计划。有什么建议?我对ruby很新,所以我很好奇如何调用各种控制器上的方法。谢谢!

2 个答案:

答案 0 :(得分:2)

看来你想要的是这个:

<td><%= link_to 'Show Plans', plans_path(:id => dgroup.id) %></td>

如果不起作用,请尝试更改参数名称:

<td><%= link_to 'Show Plans', plans_path(:dgroup_id => dgroup.id) %></td>

并在您的控制器中:

@dID = Dgroup.find(params[:dgroup_id])

答案 1 :(得分:0)

使用嵌套资源不是一个好地方吗?

resources :dgroups do
  resources :plans do
  end
end

rake routes
    dgroup_plans GET    /dgroups/:dgroup_id/plans(.:format)          plans#index
...
    dgroup_plan GET    /dgroups/:dgroup_id/plans/:id(.:format)       plans#show

<td><%= link_to 'Show Plans', dgroup_plans(dgroup) %></td>
<td><%= link_to 'Edit Plan', dgroup_plan(dgroup, plan) %></td>