在我的网站(用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
的部分变为实际代码。我怎么能这样做?
答案 0 :(得分:0)
你不能直接这样做:一个班级要么有关系,要么没有关系(虽然当然可能没有相关记录)
您可以在关联上设置条件,但据我所知,您只能在相关集合上设置条件(在本例中为表2)
然而,您可以覆盖生成的方法,例如
class Table1 < ActiveRecord::Base
has_one :table2
def table2(*args)
bool ? super : nil
end
end
这适用于当前版本的activerecord - 而不是支持多久(旧版本直接在类上定义了关联方法,因此你无法调用super)