1

我试图简单地将一个对象(dgroup)传递给另一个控制器的(tplans)索引操作。我正在执行基于外键的查找,所以我向它传递了一个它必须过滤的对象 id,但它似乎不起作用。这是我的代码:

在 dgroup 的 index.html 中:

<% @dgroups.each do |dgroup| %>
<tr>
<td><%= dgroup.id %></td>
<td><%= link_to 'Show TPlans', tplans_path(dgroup) %></td>
<td><%= link_to 'Edit', edit_dgroup_path(dgroup) %></td>
<td><%= link_to 'Destroy', dgroup, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>

在 tplan 的控制器中:

def index
  @dgid = Dgroup.find(params[:id])
  @tplans = @dgid.tplans

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @tplans }
end
end

我究竟做错了什么?请注意,如果我更换:

@dgid = Dgroup.find(params[:id])

@dgid = Dgroup.find(1)

代码有效,只是显然没有找到我想要的对象。我这样做只是为了确保控制器代码的结构正确。

4

2 回答 2

2

我怀疑你的params[:id]结果是零。

尝试

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

你会在你的索引方法中得到它。

原因是如果你 rake:routes 你会看到

 tplans GET    /tplans(.:format)          {:action=>"index", :controller=>"tplas"}
于 2013-04-26T11:05:44.797 回答
0

您正在将一个对象 dgroup 传递给您的链接,而不是传递一个 id。

尝试

<% @dgroups.each do |dgroup| %>
<tr>
<td><%= dgroup = dgroup.id %></td>
<td><%= link_to 'Show TPlans', tplans_path(dgroup) %></td>
<td><%= link_to 'Edit', edit_dgroup_path(dgroup) %></td>
<td><%= link_to 'Destroy', dgroup, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>

或者

<% @dgroups.each do |dgroup| %>
<tr>
<td><%= dgroup.id %></td>
<td><%= link_to 'Show TPlans', tplans_path(dgroup.id) %></td>
<td><%= link_to 'Edit', edit_dgroup_path(dgroup.id) %></td>
<td><%= link_to 'Destroy', dgroup.id, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
于 2013-04-26T11:49:21.220 回答