Ruby on rails 你有很多的IF条件吗

Ruby on rails 你有很多的IF条件吗,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有可以有女士的广告,但前提是类型是“俱乐部” 有没有办法做到这一点?尤其是不创建女士对象? 如果lady对象的父对象是type=club,则在创建之前,我是否必须检查该对象 class Advertisement < ActiveRecord::Base validates_inclusion_of :type, in: %w(club lady) has_many :ladies, :dependent=>:destroy #only have ladies i

我有可以有女士的广告,但前提是类型是“俱乐部”

有没有办法做到这一点?尤其是不创建女士对象? 如果lady对象的父对象是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
类广告:毁灭 #只有在俱乐部里才有女士= def女士 返回零,除非类型==“俱乐部” 超级的 结束 结束
我正在使用Rails 3.2。

Rails实现这一点的方法是STI:

 class Advertisement < ActiveRecord::Base
 end

 class LadyAd < Advertisement
   has_many :ladies, :dependent=>:destroy
 end
类广告:毁灭 结束
而且只有LadyAd对象能够拥有女士。

可能使用活动记录关联扩展:(使用proxy\u association.owner)

module LadiesAtClub
德福俱乐部
#您可能需要在这里迭代数组或其他内容。。。
proxy_association.owner.type==“俱乐部”
结束
结束
类广告女士俱乐部
结束

似乎所有这些都是将组合(有很多)与继承(lady 假设您正在进行自引用联接,则需要一个club_id列:

class Advertisement < ActiveRecord::Base
   has_many :ladies, -> {where(type: 'club')}, class_name: "Advertisment"
 end
类广告{where(type:'club')},班级名称:“Advertisment” 结束
这和以前一样。在我们有俱乐部和单身女士之前,唯一的区别是,一个俱乐部可以有很多女士,而单身女士只有她自己。但我想换一个广告,因为女士或俱乐部有1:1相同的属性,只是不同,一个俱乐部可以有很多工作的女孩,而女士只是独自工作,我不明白。以前是俱乐部和女士吗?你们有从广告中继承的独立模型吗。当你有很多“女士”时,你是否在进行自我参照连接?或者这位女士是一个单独的模特(并没有双关语的意思)和她自己的桌子?名字有点混乱。现在我有俱乐部和单身女士。两者都是100%相同的,相同的图片,相同的属性,不同的是,一个俱乐部可以有很多女士(这是一个完全不同的模式)。在一个城市里,我必须寻找俱乐部和单身女性,如果我改变了一件事,两件事都要改变,等等。这不是干的。我想把它做成广告,如果是俱乐部的话,广告可以有女士。这对我的用户也很有帮助,我提供了一个API,他们可以插入更容易的广告。目前我有俱乐部和单身女士。俱乐部是一个可以有很多女士的俱乐部。单身女性有着与俱乐部一样的照片、数据、开业时间,只是不同的是她是单身,没有任何员工。所以我必须在城里寻找俱乐部和单身女性,这只是重复代码。这就是为什么我想把它概括为广告(一个俱乐部或单身女性),如果它是一个俱乐部,它可以有工作女性。希望你现在就明白:-)我“明白”了问题和目标,但我不知道要查询哪些表。如果您使用的是STI(如属性类型所示),则广告、俱乐部和单身女性都可以在同一张表上。在找到好的帮助之前,你应该展示你的整个领域模型来消除歧义。。。
class Advertisement < ActiveRecord::Base
   has_many :ladies, -> {where(type: 'club')}, class_name: "Advertisment"
 end