我试图使用' 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 %>
答案 0 :(得分:2)
find_or_initialize_by
有两个参数。第一个是散列,第二个是在没有找到任何内容时使用的块,而是初始化。如果您不需要该块,您可以这样做:
@order = Order.find_or_initialize_by(user_id: value, item_id: value)