Ruby on rails 3 当遇到验证错误时,为什么我的新函数不重新创建对象?
我正在检查我的应用程序,确保它正确响应验证问题。在这种特殊情况下,创建新的交货订单时,必须使用唯一的编号。我发现当我输入一个重复的数字时,系统会显示一个错误 错误是:Ruby on rails 3 当遇到验证错误时,为什么我的新函数不重新创建对象?,ruby-on-rails-3,Ruby On Rails 3,我正在检查我的应用程序,确保它正确响应验证问题。在这种特殊情况下,创建新的交货订单时,必须使用唯一的编号。我发现当我输入一个重复的数字时,系统会显示一个错误 错误是: undefined method `purchase_request_fundings' for nil:NilClass 我知道为什么会发生这个错误,但我不知道如何修复它。出现此错误的原因是,在应用程序发现验证错误后,它试图将用户踢回delivery order new函数,并向用户显示友好的错误消息。然而,@purchase
undefined method `purchase_request_fundings' for nil:NilClass
我知道为什么会发生这个错误,但我不知道如何修复它。出现此错误的原因是,在应用程序发现验证错误后,它试图将用户踢回delivery order new函数,并向用户显示友好的错误消息。然而,@purchase_request对象在返回到新函数时没有使用任何数据实例化。我认为它没有看到正确查找和设置对象所需的参数,因此对象-@purchase\u request-被保留为nil
我的代码:
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]
如果我正确理解了这种情况,那么对
呈现操作的调用:“new”
不会调用控制器中的new
方法,它只使用create方法设置的实例变量呈现new
视图。所以你需要做一些类似的事情:
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
您可以发布您的
发货订单
型号吗?您的代码看起来像是,应该有一个DeliveryOrder#归属于:purchase\u request
。因此,您可以致电@delivery\u order.purchase\u request
谢谢@danwich…这很简单。