我试图简单地将一个对象(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)
代码工作,显然没有找到我想要的对象。我这样做是为了确保控制器代码的结构正确。
答案 0 :(得分:2)
我怀疑你的params[:id]
即将来临。
尝试
<td><%= link_to 'Show TPlans', tplans_path(:id => dgroup.id) %></td>
你将在索引方法中得到它。
原因是如果你耙:你会看到的路线
tplans GET /tplans(.:format) {:action=>"index", :controller=>"tplas"}
答案 1 :(得分: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 %>