远程表单无法找到关联ID

时间:2018-02-16 21:27:10

标签: ruby-on-rails ruby ajax

我的计划有一个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'

2 个答案:

答案 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进行清理时,您将访问模型数据。