Передача идентификатора контроллеру из объекта в Rails

Я пытаюсь просто передать объект (dgroup) в действие index другого контроллера (tplans). Я выполняю поиск на основе внешнего ключа, поэтому я передаю ему идентификатор объекта, который он должен фильтровать, но, похоже, он не работает. Это мой код:

В файле index.html группы dgroup:

<% @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)

код работает, просто явно не находит нужный мне объект. Я просто делал это, чтобы убедиться, что код контроллера правильно структурирован.


person jamesdlivesinatree    schedule 26.04.2013    source источник
comment
Пожалуйста, можете ли вы отобразить маршрут для индекса dgroup и изменить действие?   -  person Mohanraj    schedule 26.04.2013
comment
вам, вероятно, нужно использовать params[:dgroup_id], в зависимости от вашего маршрута   -  person mihai    schedule 26.04.2013


Ответы (2)


Я подозреваю, что ваш params[:id] приближается к нулю.

пытаться

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

вы получите его в своем индексном методе.

причина в том, что если вы разгребете: маршруты вы увидите

 tplans GET    /tplans(.:format)          {:action=>"index", :controller=>"tplas"}
person user2323194    schedule 26.04.2013

Вы передаете объект dgroup своим ссылкам вместо передачи идентификатора.

Пытаться

<% @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 %>

or

<% @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 %>
person Deepika    schedule 26.04.2013