Rails对实例本身的条件关联

时间:2018-08-23 09:46:43

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5 rails-activerecord

比方说,我们有一个Comment,它是通过belongs_to关联连接到Article的。注释具有一个名为is_connected的属性,它是一个布尔值。

我知道有可能在belongs_to关系中添加一个条件。是否可以在实例本身上添加条件?

class Comment
  belongs_to :article, -> {where: is_connected: true}
end

像本例中一样-is_connected引用了文章模型。但我希望这种关系仅在comment.is_connected == true

时存在

2 个答案:

答案 0 :(得分:2)

您可以定义条件验证:

belongs_to :article, optional: true
validates :article, presence: true, if: :is_connected

还可以选择

validates :article, absence: true, unless: :is_connected

或者,如果您仍希望填充关联,但表现得好像不是,则需要定义一个自定义方法:

def connected_article
  is_connected ? article : nil
end

答案 1 :(得分:0)

我不确定您为什么要采用这种方法。我的意思是,如果评论中包含article_id,那么您可以放心地说此评论与文章相关联。 is_connected似乎是重复的。 article_id存在/不存在的工作方式相同。