我可以想到几种方法来做到这一点,但我不确定该选择什么..
我有这个类Topic
,我正在尝试对其范围进行限制,以便仅在它具有关联对象Reply
或topic.replies
计数大于 0 时才返回主题。
最糟糕的方法:
@topics.select{ | topic | topic.replies > 0 && topic.title == "Conversation" }
理想情况下,我想使用where
范围。
scope = current_user.topics
scope = scope.joins 'left outer join users on topics.registration_id = registration_members.registration_id'
# scope = .. here I want to exclude any of these topics that have both the title "Conversations" and replies that are not greater than 0
我需要将这些选择“附加”到已经选择的任何其他内容上。所以我的选择不应该将所有其他人排除在这个选择之外。这只是说任何Topic
回复少于一个并且也称为“对话”的人都应该被排除在最终返回之外。
有任何想法吗?
更新
一个半哈希的想法:
items_table = Arel::Table.new(scope)
unstarted_conversations = scope.select{|a| a.title == "Conversation" && a.replies.count > 0}.map(&:id)
scope.where(items_table[:id].not_in unstarted_conversations)