如果你是真的,你可以拥有

时间:2015-10-03 12:17:25

标签: ruby activerecord

在我的网站(用sinatra编写)我正在尝试建立一个数据库。我有2个表,这里称为Table1和Table2。

models.rb

class Table1 < ActiveRecord::Base
    Table1.where(bool:true) has_one :table2 # PSUDO-CODE
    # So that every record where bool:true has the relationship
    # but every record where bool:false or bool:nil doesn't
end
class Table2 < ActiveRecord::Base
    belongs_to :table1
end

我正在尝试找到一种方法,将标有PSUDO-CODE的部分变为实际代码。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

你不能直接这样做:一个班级要么有关系,要么没有关系(虽然当然可能没有相关记录)

您可以在关联上设置条件,但据我所知,您只能在相关集合上设置条件(在本例中为表2)

然而,您可以覆盖生成的方法,例如

class Table1 < ActiveRecord::Base
  has_one :table2
  def table2(*args)
    bool ? super : nil
  end
end

这适用于当前版本的activerecord - 而不是支持多久(旧版本直接在类上定义了关联方法,因此你无法调用super)