繁体   English   中英

如何写此活动记录? (Rails 3.1)

[英]How can I write this active record? (Rails 3.1)

我有三种模式:

  • raw_coupon
  • 优惠券
  • 商店

如果我要遍历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

我该如何写出[此商店的优惠券代码尚不存在]

注意:多个商店可以使用相同的优惠券代码,因此我需要检查该商店是否专门存在相同的coupon_code。

编辑:这是模型关联:

  • raw_coupon:has_one:优惠券
  • 优待券:belongs_to:raw_coupon &&归属地:store
  • 商店:has_many:优惠券

只需向Coupon添加唯一的验证,并在致电coupon.save时注意错误:

class Coupon < ActiveRecord::Base
    validates :coupon_code, :uniqueness => { :scope => :store_id }
    #...
end

:scope将唯一性检查限制为优惠券的store_id的优惠券代码。

您还应该在store_idcoupon_code上的coupons上添加唯一索引,作为额外的保护层。

您可以使用helper的find_or_initialize_。 我不会推荐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

我用保存! 如果验证失败,则引发异常。 仅供参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM