如何添加条件has_many关联

时间:2016-12-28 10:51:20

标签: ruby-on-rails ruby-on-rails-4 associations conditional-associations

我有以下数据库结构

任务

id   name   parent_id
1    Abc    nil
2    Pqr    1

评论

id task_id body  
1   1      This is sample comment
2   1      This is another sample comment

task.rb

has_many :comments

comment.rb

belongs_to :task

我的要求是有一个关联,这样对于父母和孩子我应该得到父评论,即对于上述任务,我应该得到['这是样本评论','这是另一个样本评论']因为儿童任务不会有任何意见。

我尝试了类似下面的内容,但它不起作用

task.rb

has_many :comments,  -> (o) { where(comments: {task_id: [o.id, o.parent_id]}) }

1 个答案:

答案 0 :(得分:1)

它不起作用,因为您的新条件与来自has_many的默认条件相结合。您可以使用unscope方法取消默认条件:

has_many :comments, -> (task) { unscope(:where).where(comments: {task_id: [task.id, task.parent_id]}) }

注意:如果有的话,这将会破坏评论模型的default_scope

在Rails5中,您可以将OR条件添加到默认条件:

has_many :comments, -> (task) { or(comments: {task_id: task.parent_id}) }