在嵌套路由中使用Destroy时发生路由错误

时间:2013-01-13 11:41:49

标签: ruby-on-rails

我在嵌套资源中有一个奇怪的BUG。我有一个卖家/汽车关系,卖家有很多汽车。现在我需要删除属于卖家的汽车(卖家通过Sessions #create进行身份验证,其ID存储在会话[:seller_id]中:

这是列出属于此特定卖家的所有汽车的汽车索引视图:

<%= @cars.each do |car| %>
<tr>
<td><%= car.brand %></tr></td>
<td><%= link_to 'Edit', edit_seller_car_path(session[:seller_id], car) %></td>
<td><%= link_to 'Destroy', seller_car_path(session[:seller_id], car) %></td>
</tr>
<% end %>

站在汽车索引列出属于经过验证的卖家的所有汽车,URL看起来像localhost:3000 / sellers / 2 / cars。此页面显示列出具有编辑和销毁按钮的汽车的表格(编辑工作正常)

这是Cars#destroy:

@seller = Seller.find(params[:seller_id])
@car = @seller.cars.find(params[:id])
@car.destroy
flash[:notice] = "Deleted"
redirect_to seller_cars_url(session[:seller_id])

这是Cars#edit(编辑时工作正常):

@seller  = Seller.find(params[:seller_id])
@car = @seller.cars.find(params[:id])

当我点击销毁按钮时,会发生以下错误:

1)奇怪的是,汽车仍然成功删除。

2)我收到路由错误:

No route matches {:action => "edit", :controller => "cars", :seller_id=>nil, id=>#<Car id:23, brand:"Opel"...

看起来问题出现在索引页面的“编辑”按钮中。它所指的汽车是表中的第一辆汽车,而且sell_id在这里是零,这意味着Seller_id不再在会话[:seller_id]中举行,这是Sessions#destroy的行为

3)我注意到卖家已退出。好像Car控制器中的destroy会调用Sessions控制器中的Destroy来清除会话。

4)对于Cars索引,URL似乎是正确的:localhost:3000 / sellers / 2 / cars,但我仍然看到2中提到的路由错误。

如果您能帮我指导这个奇怪的行为,我将不胜感激。谢谢。

0 个答案:

没有答案