Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当尝试创建新实例时,它将';s正在丢失执行此操作所需的关联参数_Ruby On Rails_Ruby_Forms_Activerecord - Fatal编程技术网

Ruby on rails 当尝试创建新实例时,它将';s正在丢失执行此操作所需的关联参数

Ruby on rails 当尝试创建新实例时,它将';s正在丢失执行此操作所需的关联参数,ruby-on-rails,ruby,forms,activerecord,Ruby On Rails,Ruby,Forms,Activerecord,轨道5.1.6 我有一个应用程序,上面列出了产品,你可以在订单中添加一定数量的产品。好吧,这就是我的想法。所以,现在我有一个表单来获取数量,还获取产品id和订单id,通过order_items表将它们关联起来,order_items表也保存了数量。看起来表单正在抓取order\u id并在order\u items参数中进行设置。在这种情况下,5。db中不存在id为5的订单。当参数传递给.new时,它传递的是一个空白id?我错过了什么 ActiveRecord::RecordNotFound(找

轨道5.1.6

我有一个应用程序,上面列出了产品,你可以在订单中添加一定数量的产品。好吧,这就是我的想法。所以,现在我有一个表单来获取数量,还获取产品id和订单id,通过order_items表将它们关联起来,order_items表也保存了数量。看起来表单正在抓取order\u id并在order\u items参数中进行设置。在这种情况下,5。db中不存在id为5的订单。当参数传递给.new时,它传递的是一个空白id?我错过了什么

ActiveRecord::RecordNotFound(找不到id为的订单): 表格雇员再培训局

<% @products.each do |product| %>
<div class="col s4">

  <h4><%= link_to product.name, product_path(product) %></h4>

  <%= form_for @order_item do |f| %>
    <%= f.hidden_field :order_id, value: @order.id %>
    <%= f.hidden_field :product_id, value: product.id %>
    <%= f.number_field :quantity, placeholder: "quantity" %>

    <span class="waves-effect waves-light btn"><%= f.submit "Add to order" %></span>

  <% end %>
</div>
终点站

Started POST "/order_items" for 127.0.0.1 at 2018-06-06 16:50:31 -0700
Processing by OrderItemsController#create as JS
Parameters: {"utf8"=>"✓", "order_item"=>{"order_id"=>"5", 
"product_id"=>"2", "quantity"=>""}, "commit"=>"Add to order"}
Order Load (0.2ms)  SELECT  "orders".* FROM "orders" WHERE 
"orders"."id" = $1 LIMIT $2  [["id", nil], ["LIMIT", 1]]
Completed 404 Not Found in 2ms (ActiveRecord: 0.2ms)

ActiveRecord::RecordNotFound (Couldn't find Order with 'id'=):

app/controllers/order_items_controller.rb:4:in `create'
在这里:

您正在通过
参数[:id]
进行查找。但是你看

Parameters: {"utf8"=>"✓", "order_item"=>{"order_id"=>"5", "product_id"=>"2", "quantity"=>""}, "commit"=>"Add to order"}
参数[:id]
。但是,您确实有
参数[:order\u item][:order\u id]
。也许你打算用这个

此外,您还可以简化
创建
操作:

def create
  @order_item = OrderItem.new(item_params)
  if @order_item.save
    flash[:notice] = "Your order has been added!"
    redirect_to orders_path
  else
    render :new
  end
end
假设您的参数中有所有的
order\u项
属性:

"order_item"=>{"order_id"=>"5", "product_id"=>"2", "quantity"=>""}

没有真正的需要去寻找
@订单
(除非你对事物感到紧张)

您的:创建操作至少有三个问题:

1) 表单中的一个隐藏字段将order_id作为参数传入,您应该使用它来查找顺序,如下所示:

@order = Order.find(params[:order_item][:order_id])
2) 在:create操作中对
@order
实例调用save两次

3) 实际上,您正在对
@order
实例变量调用save,但在任何时候都不保存
@item
实例变量。保存
@order
时是否保存
@item

因此,我将尝试以下方法:

def create
  @order = Order.find(params[:order_item][:order_id])

  # how come you don't save this? You instantiate it but don't appear to call save at any point.
  @item = @order.order_items.new(item_params)

  # remove the following line, which I've commented out:
  # @order.save

  # Consider whether you wish to save @order or @item, or both
  if @order.save
    flash[:notice] = "Your order has been added!"
    redirect_to orders_path
  else
    render :new
  end
end
希望有帮助,祝你好运

@order = Order.find(params[:order_item][:order_id])
def create
  @order = Order.find(params[:order_item][:order_id])

  # how come you don't save this? You instantiate it but don't appear to call save at any point.
  @item = @order.order_items.new(item_params)

  # remove the following line, which I've commented out:
  # @order.save

  # Consider whether you wish to save @order or @item, or both
  if @order.save
    flash[:notice] = "Your order has been added!"
    redirect_to orders_path
  else
    render :new
  end
end