我的主要模特:
class Coupon < ActiveRecord::Base
include Concerns::CouponDistribution
end
相关的关注类:
module Concerns::CouponDistribution
extend ActiveSupport::Concern
included do
after_create :create_coupons_for_existing_users
end
def create_coupons_for_existing_users
#
end
end
现在我有一个儿童模特&#39; discounted_coupon.rb&#39;继承自优惠券模型:
class DiscountedCoupon < Coupon
end
我已根据STI要求向我的主模型添加了一列type
:http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html
我的目标:
我想忽略关注&#34; CouponDistribution&#34;如果我创建一个新的DiscountedCoupon
记录。
所以我在我的关注中写了这个:
after_create :create_coupons_for_existing_users unless self.type == "DiscountedCoupon"
绘制错误:
未定义的方法`类型&#39;对于#
有没有其他方法可以实现我的目标?例如。明确跳过/忽略我孩子模型中的关注点?
答案 0 :(得分:1)
可能有两种方法。一个是更简单的方法:
def create_coupons_for_existing_users
return unless self.type == "DiscountedCoupon"
# your logic here
end
另一个是:
after_create : create_coupons_for_existing_users, unless: :discounted_coupon?
在您的模型中,您可以编写方法discounted_coupon?
def discounted_coupon?
self.type == "DiscountedCoupon"
end
答案 1 :(得分:1)
你可以尝试一下
module Concerns::CouponDistribution
extend ActiveSupport::Concern
included do
after_create :create_coupons_for_existing_users, if: Proc.new {|cd| cd.type == "DiscountedCoupon" }
end
def create_coupons_for_existing_users
#
end
end