【发布时间】:2016-04-20 22:42:08
【问题描述】:
我的 orders/edit.html.erb 中有一个这样开头的表单:
<%= simple_form_for [@reservation, @order] do |f| %>
订单控制员:
def edit
@reservation = Reservation.find_by_id(params[:reservation_id])
@order = Order.find_by_id(params[:id])
end
协会:
预订:has_one下单
路线:
resources :reservations do
resources :orders
end
如果我的路径类似于 /reservations/10/orders/10/edit 我最终会从 Rails 收到错误消息 NoMethodError in Orders#edit 和 undefined method 'model_name' for nil:NilClass
当我创建一个新订单时,表单工作得很好,所以不知道为什么我突然收到错误,有人可以帮我解决这个问题吗?
【问题讨论】:
-
将
find_by_id更改为find... 可能是错误的,但我的猜测是该行不存在;如果是这样,find会爆炸(正确地,因为无论如何您都不想在这种情况下继续);find_by_id只会将事物设置为nil,这会在途中的某个地方不确定地爆炸。 -
这绝对有效,请在下面回答,以便我将其标记为解决方案!非常感谢!顺便说一句,find_by_id 有没有办法“炸毁”,所以我可以得到同样的错误? @GoGoCarl
-
谢谢。有关第二个问题的详细信息,请参见下文。
find_by_id永远不会爆炸,如果找不到记录,它总是会返回nil。但是你可以手动处理这种情况。
标签: ruby-on-rails ruby ruby-on-rails-4 simple-form