0

我有以下DB结构如何添加条件has_many关联

任务

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

_but不WORK_ - 有什么错误? – 31piy

回答

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}) } 
+0

我尝试过'rewhere',但它仍然结合了默认值 – Salil

+0

你是对的。这没有用。我需要更多时间来寻找解决方案 – chumakoff

+0

在这里,你去!更新了答案。 – chumakoff