我在使用rails中的SQL获取某些模型时遇到了一些麻烦,我想知道是否有人知道这个特定问题的良好解决方案。基本上,这些是我的课程的样子:
class SubscriberList < ActiveRecord::Base
has_many :subscriptions
end
class Subscription < ActiveRecord::Base
has_many :messages
belongs_to :subscription_list
end
class Announcement < ActiveRecord::Base
has_many :messages
end
class Message < ActiveRecord::Base
belongs_to :subscription
belongs_to :announcement
end
现在,我想访问SubscriptionList的所有公告,不包括重复项。这可能吗?可以用一个SQL查询来完成,还是只是一厢情愿的想法?
例如,这就是我想要的:
class SubscriptionList < ActiveRecord::Base
def announcements
Announcements.joins(:messages).where(message: { subscription: {subscription_list: self} })
end
end
答案 0 :(得分:1)
我认为你的想法一般是正确的。试试这个变种
Announcements.
joins(messages: {subscription: :subscription_list}).
where(subscription_lists: {id: self.id})
# opposite
SubscriptionList.
joins(subscriptions: {messages: :announcement}).
where(announcements: {id: self.id})
注意:
*这些查询可能会返回重复项 - 因此uniq
可以添加到它们中
* self
可以省略(我写它是为了表明这是实例的id并避免误解)