我正在瀏覽我的應用程序並確保它對驗證問題做出正確響應。在這種特殊情況下,創建新的交貨單時,您必須在創建交貨單時使用唯一的編號。我發現當我輸入重複號碼時,系統顯示錯誤。爲什麼我的新函數在遇到驗證錯誤時不重新創建對象?
的錯誤是:
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]
你可以發佈你的'DeliveryOrder'模型嗎?你的代碼看起來像應該有一個'DeliveryOrder#belongs_to:purchase_request'。 所以你可能會打電話給@ @ delivery_order.purchase_request' – Deradon