Ruby on rails rails ActiveRecord查找或创建
我在一个类中有两个方法,第一个方法尝试在数据库中查找记录并返回它(如果它存在)。第二个方法仅在第一个方法未找到任何结果时执行,并且它使用Ruby on rails rails ActiveRecord查找或创建,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我在一个类中有两个方法,第一个方法尝试在数据库中查找记录并返回它(如果它存在)。第二个方法仅在第一个方法未找到任何结果时执行,并且它使用newActiveRecord方法创建一个新记录 有人建议我可以用一个ActiveRecord调用来替换这两种方法,但我似乎无法找到方法 方法: def find_cart_item @cartitem = @cart.cart_items.find_by product_id: @product.id end def create_cart_item @
new
ActiveRecord方法创建一个新记录
有人建议我可以用一个ActiveRecord调用来替换这两种方法,但我似乎无法找到方法
方法:
def find_cart_item
@cartitem = @cart.cart_items.find_by product_id: @product.id
end
def create_cart_item
@cartitem = @cart.cart_items.new(quantity: 0, price: @product.price, product: @product)
end
有什么建议吗 如果您使用的是rails 4,您可以
@cart
.cart_items
.where(quantity: 0, price: @product.price, product_id: @product.id)
.first_or_initialize
@cart
.cart_items
.find_or_initialize_by_quantity_and_price_and_product_id(0, @product.price, @product.id)
如果要在数据库中创建对象,也可以使用find\u或\u create
如果您使用的是rails 3或更低版本,您可以
@cart
.cart_items
.where(quantity: 0, price: @product.price, product_id: @product.id)
.first_or_initialize
@cart
.cart_items
.find_or_initialize_by_quantity_and_price_and_product_id(0, @product.price, @product.id)
如果您想在数据库中创建对象,还可以使用
按数量、价格和产品id查找或创建
@cart
.cart_items
.where(quantity: 0, price: @product.price, product_id: @product.id)
.first_or_initialize
@cart
.cart_items
.find_or_initialize_by_quantity_and_price_and_product_id(0, @product.price, @product.id)
如果要在数据库中创建对象,也可以使用find\u或\u create
如果您使用的是rails 3或更低版本,您可以
@cart
.cart_items
.where(quantity: 0, price: @product.price, product_id: @product.id)
.first_or_initialize
@cart
.cart_items
.find_or_initialize_by_quantity_and_price_and_product_id(0, @product.price, @product.id)
如果要在数据库中创建对象,也可以使用按数量、价格和产品id查找或创建
Cart.find_or_create_by(product_id: @product.id) do |c|
c.quantity = 0
c.price = @product.price
end
有关详细说明,请参见
请注意,数量可能默认为零(以使代码更干净),因此被排除在外,但我已将其包括在内,以防您没有默认值。我认为您需要的是
Cart.find_or_create_by(product_id: @product.id) do |c|
c.quantity = 0
c.price = @product.price
end
有关详细说明,请参见
请注意,数量可能默认为零(以使代码更干净),因此被排除在外,但我已将其包括在内,以防您没有默认值。您可以使用first\u或\u create代码>或首先\u或\u初始化
Cart.first_or_create!(product_id: @product.id) do |ct|
ct.quantity = 0
ct.price = @product.price
ct.product_id @product.id
end
或
还有10个最神奇的活动记录查询。你会喜欢的 您可以先使用或创建代码>或首先\u或\u初始化
Cart.first_or_create!(product_id: @product.id) do |ct|
ct.quantity = 0
ct.price = @product.price
ct.product_id @product.id
end
或
还有10个最神奇的活动记录查询。你会喜欢的 为什么不find\u或\u create\u by
?@emaillenin:OP只是尝试初始化行\u项,稍作修改第一个答案按我的要求工作。thanx为什么不find\u或\u create\u by
?@emaillenin:OP只是尝试初始化行\u项,稍作修改第一个答案按我的要求工作。thanx