我的计划有一个WorkOrder
:has_many
LineItems
。我将部分(/views/line_items/_add_line_item.html.erb)
与WorkOrder#Show (/views/work_orders/show.html.erb)
一起呈现为remote true
。但是,在提交表单时,帖子会失败,因为ActiveRecord::RecordNotFound (Couldn't find WorkOrder with 'id'=)
。我在这里做错了什么?
/controllers/line_items_controller.rb#Create
def create
@work_order = WorkOrder.find(params[:work_order_id])
@line_item = @work_order.line_items.build(line_item_params)
respone_to do |format|
if @line_item.save
format.html { redirect_to @work_order, notice: 'added line item' }
format.js
else
redirect_to @work_order
end
end
end
/controllers/line_items_controller.rb#line_item_params
def line_item_params
params.permit(:line_item, :description, :quantity, :price_adjustment, :work_order_id)
end
/controllers/work_orders_controller.rb#Show
def show
@line_items = @work_order.line_items
@new_line_item = @work_order.line_items.new
end
/views/work_orders/show.html.erb
[...]
<%= render 'line_items/add_line_item', wo: @work_order %>
[...]
/views/line_items/_add_line_item.html.erb
<%= form_for(@new_line_item, remote: true) do |form| %>
<%= form.collection_select(:inventory_sku_id, Inventory::SKU.all, :id, :descriptive_id) %>
<%= form.text_field :description, id: :line_item_description %>
<%= form.number_field :quantity, id: :line_item_quantity %>
<%= form.hidden_field :work_order_id, id: :work_order_id, value: wo.id %>
<div class="actions">
<%= form.submit "New Item" %>
</div>
<% end %>
创建新行时的控制台输出:
[INFO ] === Processing by LineItemsController#create as JS
[INFO ] Parameters: {"utf8"=>"✓", "line_item"=>{"inventory_sku_id"=>"1", "description"=>"Test", "quantity"=>"2", "work_order_id"=>"1"}, "commit"=>"New Item"}
[DEBUG] Unpermitted parameters: :utf8, :line_item, :commit
[DEBUG] WorkOrder Load (0.4ms) SELECT "work_orders".* FROM "work_orders" WHERE "work_orders"."id" = $1 LIMIT $2 [["id", nil], ["LIMIT", 1]]
[INFO ] Completed 404 Not Found in 3ms (ActiveRecord: 0.4ms)
[FATAL] ActiveRecord::RecordNotFound (Couldn't find WorkOrder with 'id'=):
[FATAL] app/controllers/line_items_controller.rb:31:in `create'
答案 0 :(得分:0)
您的模型是否嵌套?将表单更改为:
<%= form_for(wo, @new_line_item, remote: true) do |form| %>
修改强>
将line_item_params更改为require:line_item
def line_item_params
params.require(:line_item).permit(:description, :quantity, :price_adjustment, :work_order_id, :inventory_sku_id)
end
答案 1 :(得分:0)
如何为line_item_params [:work_order_id]更改parms [:work_order_id]?通常在对params进行清理时,您将访问模型数据。