我有以下型号:
class Notification < ActiveRecord::Base
belongs_to :notificatable, polymorphic: true
end
class BounceEmailNotification < ActiveRecord::Bas
has_one :notification, :as => :notificatable, :dependent => :destroy
end
class UserNotifierEmailNotification < ActiveRecord::Base
has_one :notification, :as => :notificatable, :dependent => :destroy
end
如您所见,通知可以是“退回电子邮件通知”或“用户通知程序电子邮件通知”类型。 BounceEmailNotification
模型具有事件字符串属性。如果我想要检索所有用户通知程序电子邮件通知以及具有特定事件值的所有退回电子邮件通知,按created_at
排序,该怎么办?
像这样(使用吱吱声):
(Notification.joins{ notificatable(BounceEmailNotification) }.where('bounce_email_notifications.event' => 'error') + Notification.joins { notificatable(UserNotifierEmailNotification) }).sort_by { |n| n.created_at }
会起作用,但我不想使用Ruby来订购通知。我能做什么?感谢
答案 0 :(得分:0)
试试这个。
Notification.joins('left outer join bounce_email_notifications on notifications.notificatable_id = bounce_email_notifications.id and notificatable_type = "BounceEmailNotification"').
where("bounce_email_notifications.event = ? or notificatable_type = ?",'error',UserNotifierEmailNotification.to_s).
order('notifications.created_at')
这是使用活动记录3.2但我想它应该在rails 3中工作。
我没有使用squeel cant评论如何使用它与squeel,但这可以给你一个简短的想法。
在吱吱声中我想出了一个使用squeel docs
创建的这样的东西(未测试)Notification.notificatable{notable(BounceEmailNotification).outer}. where{
{ ('bounce_email_notifications.event'=>'error') | (:notificatable_type=>UserNotifierEmailNotification.to_s) }
概念步骤
在bounce_email_notifications上保持联接以获取所有bounce_email_notifications以及结果中的非bounce_email_notifications通知
检查bounce_email_notifications.event = event
要么
所有UserNotifierEmailNotification记录的notificatable_type ='UserNotifierEmailNotification'
通过notification.created at
希望这有帮助。