通过参数混淆轨道查找或初始化4

时间:2015-03-11 18:32:33

标签: ruby-on-rails-4 parameter-passing

我试图使用' find_or_initialize_by'在我的订单控制器。我需要通过两个参数user_id和item_id找到记录。如果那个特定的订单组合不存在,那么我想创建它。

以下是我在订单控制器中的内容:

def create
    @order = Order.find_or_initialize_by(#not sure of syntax here)
      @order.update_attributes(quantity_requested)
        @order.save
          redirect_to :back
end 

我尝试过很多不同的参数,并且都会产生错误信息。任何人都可以澄清在这里传递参数的正确方法吗?

感谢您的帮助。

编辑以添加更多代码:

db schema:

create_table "orders", force: true do |t|
    t.integer  "item_id"
    t.integer  "quantity_requested"
    t.boolean  "order_completed"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.integer  "user_id" 

订单型号:

class Order < ActiveRecord::Base
    belongs_to :user 
    has_one :item, dependent: :destroy
    validates :user_id, presence: true
end

项目展示:

<%= form_for Order.new do |f| %>
   <%= f.number_field :quantity_requested, value: 0, max:  @item.quantity, min: 1, class: "item-quantity form-control", :onclick =>  '$(this.form).submit()'  %>
<% end %>

1 个答案:

答案 0 :(得分:2)

find_or_initialize_by有两个参数。第一个是散列,第二个是在没有找到任何内容时使用的块,而是初始化。如果您不需要该块,您可以这样做:

@order = Order.find_or_initialize_by(user_id: value, item_id: value)