我有三种模式:
如果我正在循环使用raw_coupons,只有当该商店不存在相同的coupon_code时,如何将其保存为优惠券?以下代码使其更加清晰:
raw_coupon.each do |raw_coupon|
coupon = Coupon.new
coupon.store_id = raw_coupon.store_id
coupon.coupon_code = raw_coupon.coupon_code
coupon.save if [coupon_code for this store doesn't already exist]
end
如何写出 [此商店的优惠券代码尚不存在]
注意:多个商店可以使用相同的优惠券代码,因此我需要检查该商店是否存在相同的优惠券代码。
编辑:以下是模型关联:
答案 0 :(得分:1)
只需向优惠券添加唯一的验证,并在致电coupon.save
时注意错误:
class Coupon < ActiveRecord::Base
validates :coupon_code, :uniqueness => { :scope => :store_id }
#...
end
The :scope
limits对优惠券store_id
的优惠券代码进行唯一性检查。
您还应该在coupons
和store_id
上为coupon_code
添加唯一索引,作为额外的保护层。
答案 1 :(得分:0)
你可以使用find_or_initialize_by帮助器。我不推荐使用find_or_create_by帮助器,因为如果在创建时验证失败,它不会引发错误。
raw_coupon.each do |raw_coupon|
coupon = Coupon.find_or_initialize_by_store_id_and_coupon_code(raw_coupon.store_id, raw_coupon.coupon_code)
coupon.save! if coupon.new_record? #This just saves you from extra DB calls.
end
我用过保存!如果验证失败,则引发异常。仅供参考