我的程序有一个:has_many LineItems的WorkOrder。我使用remote true将部分(/views/line_items/_add_line_item.html.erb)渲染为WorkOrder#Show (/views/work_orders/show.html.erb)。但是,当提交表单时,post失败,因为ActiveRecord::RecordNotFound (Couldn't find WorkOrder with 'id'=)。我在这里做错了什么?
/controllers/line_item_controller er.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_Controler.rb#显示
def show
@line_items = @work_order.line_items
@new_line_item = @work_order.line_items.new
end/views/work_order/show.html.erb
[...]
<%= render 'line_items/add_line_item', wo: @work_order %>
[...]/views/line_item/_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'发布于 2018-02-17 05:40:04
你的模型是嵌套的吗?将您的表单更改为:
<%= form_for(wo, @new_line_item, remote: true) do |form| %>编辑
更改您的line_item_params以要求:line_item
def line_item_params
params.require(:line_item).permit(:description, :quantity, :price_adjustment, :work_order_id, :inventory_sku_id)
end发布于 2018-02-17 05:43:41
如何为line_item_params:work_order_id更改parms:work_order_id?通常,在清理参数时,这是您访问模型数据的方式。
https://stackoverflow.com/questions/48835102
复制相似问题