我正在浏览我的应用程序并确保它对验证问题做出正确响应。在这种特殊情况下,创建新的交货订单时,必须在创建一个时使用唯一的编号。我发现当我输入重复的数字时,系统会显示错误。
错误是:
undefined method `purchase_request_fundings' for nil:NilClass
我理解为什么会出现此错误,但我不明白如何修复它。发生错误的原因是,在应用程序发现验证错误后,它会尝试将用户踢回到传递顺序新函数,并显示一条友好的错误消息给用户,但是@purchase_request对象没有用任何数据进行实例化。回到新功能。我认为它没有看到它需要找到的参数并正确设置对象,因此对象 - @purchase_request - 保留为零。
我的代码:
Controller
def new
@delivery_order = DeliveryOrder.new(:purchase_request_id => params[:purchase_request])
@purchase_request = PurchaseRequest.find(@delivery_order.purchase_request_id)
end
def create
@delivery_order = DeliveryOrder.new(params[:delivery_order])
respond_to do |format|
if @delivery_order.save
params[:discrete_tasks].each do |key, value|
DeliveryOrderFunding.create(
:delivery_order_id => @delivery_order.id,
:discrete_task_id => key,
:amount => value
)
end
format.html do
flash[:success] = "Delivery Order was succesfully created"
redirect_to @delivery_order
end
else
format.html { render action: "new" }
end
end
end
查看包含
= hidden_field_tag 'delivery_order[purchase_request_id]', params[:purchase_request]
也试过
= hidden_field_tag :purchase_request, params[:purchase_request]
答案 0 :(得分:0)
如果我正确了解情况,您对render action: "new"
的调用不会调用控制器中的new
方法,它只会使用您的实例变量呈现new
视图create方法已设置。所以你需要做一些事情:
def create
@delivery_order = DeliveryOrder.new(params[:delivery_order])
respond_to do |format|
if @delivery_order.save
...
else
format.html do
@purchase_request = PurchaseRequest.find(@delivery_order.purchase_request_id)
render action: "new"
end
end
end
end