我在嵌套资源中有一个奇怪的 BUG。我有一个卖家/汽车关系,其中一个卖家有_many Cars。现在我需要从属于卖方的汽车中删除汽车(卖方通过 Sessions#create 进行身份验证,其 id 存储在 session[: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。此页面显示带有编辑和销毁按钮的汽车列表(编辑工作正常)
这是汽车#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])
当我单击销毁按钮时,会发生此 BUG:
1)奇怪的是,车子还是删除成功了。
2)我得到路由错误:
No route matches {:action => "edit", :controller => "cars", :seller_id=>nil, id=>#<Car id:23, brand:"Opel"...
看起来这里的问题出现在索引页面的“编辑”按钮中。它所指的汽车是表中的第一辆汽车,而这里的seller_id为nil,这意味着seller_id不再保存在session[:seller_id]中,这是Sessions#destroy的行为
3) 我注意到卖家已登出。好像 Car 控制器中的 destroy 调用了清除会话的 Sessions 控制器中的 Destroy。
4) 这个 URL 似乎是 Cars 索引的正确一个:localhost:3000/sellers/2/cars,但我仍然看到 2 中提到的路由错误。
如果您能帮助指导我处理这种奇怪的行为,我将不胜感激。谢谢你。