我有以下数据库结构
任务
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]}) }
答案 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}) }