通过参数混淆查找或初始化Rails 4
Find or Initialize By Parameter Confusion Rails 4
我正在尝试在我的订单控制器中使用 '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
我尝试了许多不同的参数,但都产生了错误消息。任何人都可以在这里澄清传递参数的正确方法吗?
感谢您提供的所有帮助。
编辑以添加更多代码:
数据库模式:
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 %>
find_or_initialize_by
有两个参数。第一个是散列,第二个是一个块,如果什么都没有找到,而是被初始化。如果你不需要这个块,你可以这样做:
@order = Order.find_or_initialize_by(user_id: value, item_id: value)
我正在尝试在我的订单控制器中使用 '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
我尝试了许多不同的参数,但都产生了错误消息。任何人都可以在这里澄清传递参数的正确方法吗?
感谢您提供的所有帮助。
编辑以添加更多代码:
数据库模式:
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 %>
find_or_initialize_by
有两个参数。第一个是散列,第二个是一个块,如果什么都没有找到,而是被初始化。如果你不需要这个块,你可以这样做:
@order = Order.find_or_initialize_by(user_id: value, item_id: value)