我有广告,可以有女士,但只有类型是“俱乐部”。
有没有铁路方式呢?特别是没有创建女士对象? 如果她的父母是type = club,我是否必须在创建之前检查一个女士对象?
class Advertisement < ActiveRecord::Base
validates_inclusion_of :type, in: %w(club lady)
has_many :ladies, :dependent=>:destroy
#only have ladies if the club =
def ladies
return nil unless type == "club"
super
end
end
我正在使用Rails 3.2。
答案 0 :(得分:3)
Rails的方法是STI:
class Advertisement < ActiveRecord::Base
end
class LadyAd < Advertisement
has_many :ladies, :dependent=>:destroy
end
只有LadyAd对象能够有女士。
答案 1 :(得分:0)
也许使用活动记录关联扩展:(使用proxy_association.owner)
http://guides.rubyonrails.org/association_basics.html#association-extensions
module LadiesAtClub
def at_club
# you may need to iterate over an array or something here...
proxy_association.owner.type == 'club'
end
end
class Advertisement < ActiveRecord::Base
has_many :ladies :extend => LadiesAtClub
end
答案 2 :(得分:0)
似乎所有这一切都是混合组合(has_many)与继承(lady&lt;广告),它没有多大意义(技术上和概念上)。如果是这种情况并且您没有使用Lady和Club对象,则至少应该将类型重命名为ad_type ...
假设您正在进行自我引用加入,那么您需要一个club_id列:
class Advertisement < ActiveRecord::Base
has_many :ladies, -> {where(type: 'club')}, class_name: "Advertisment"
end