远程表单将找不到关联ID

问题描述 投票:0回答:2

我的节目有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/李讷_items_controller.日本#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/李讷_items_controller.日本#李讷_item_par AMS

def line_item_params
  params.permit(:line_item, :description, :quantity, :price_adjustment, :work_order_id)
end

/controllers/work_orders_controller.日本#show

def show
  @line_items = @work_order.line_items
  @new_line_item = @work_order.line_items.new
end

/views/work_orders/show.HTML.而不

[...]
<%= render 'line_items/add_line_item', wo: @work_order %>
[...]

/views/李讷_items/_add_李讷_item.HTML.而不

<%= 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'
ruby-on-rails ruby ajax
2个回答
0
投票

如何为line_item_params [:work_order_id]更改parms [:work_order_id]?通常在对params进行清理时,您将访问模型数据。


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
© www.soinside.com 2019 - 2024. All rights reserved.