在Rails中从Object传递ID到Controller

时间:2013-04-26 11:00:04

标签: ruby-on-rails ruby controller parameter-passing

我试图简单地将一个对象(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)

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

2 个答案:

答案 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 %>