首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >远程表单找不到关联的ID

远程表单找不到关联的ID
EN

Stack Overflow用户
提问于 2018-02-17 05:27:10
回答 2查看 67关注 0票数 0

我的程序有一个:has_many LineItemsWorkOrder。我使用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

代码语言:javascript
复制
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

代码语言:javascript
复制
def line_item_params
  params.permit(:line_item, :description, :quantity, :price_adjustment, :work_order_id)
end

/controllers/work_orders_Controler.rb#显示

代码语言:javascript
复制
def show
  @line_items = @work_order.line_items
  @new_line_item = @work_order.line_items.new
end

/views/work_order/show.html.erb

代码语言:javascript
复制
[...]
<%= render 'line_items/add_line_item', wo: @work_order %>
[...]

/views/line_item/_add_line_item.html.erb

代码语言:javascript
复制
<%= 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 %>

创建新行时的控制台输出:

代码语言:javascript
复制
[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'
EN

回答 2

Stack Overflow用户

发布于 2018-02-17 05:40:04

你的模型是嵌套的吗?将您的表单更改为:

代码语言:javascript
复制
<%= form_for(wo, @new_line_item, remote: true) do |form| %>

编辑

更改您的line_item_params以要求:line_item

代码语言:javascript
复制
def line_item_params
  params.require(:line_item).permit(:description, :quantity, :price_adjustment, :work_order_id, :inventory_sku_id)
end
票数 0
EN

Stack Overflow用户

发布于 2018-02-17 05:43:41

如何为line_item_params:work_order_id更改parms:work_order_id?通常,在清理参数时,这是您访问模型数据的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48835102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档