Ruby on rails Rails多表继承问题

Ruby on rails Rails多表继承问题,ruby-on-rails,Ruby On Rails,我开始实施MTI解决方案,并有一个基本问题。我有3个物理模型——短信通知、电子邮件通知、推特通知,它们是通知的子类。在我的代码中,有时我想说Notifications.find(:all),这样我就可以得到一组按创建时间排序的结果。然后我想根据它们的子类做一些事情。编写通知的方法是什么。查找(:all)并让Rails查看子类表并合并结果?现在Rails仍然认为我有一个物理通知表,这与我的MTI设计背道而驰 我也在考虑是否应该改用STI。我可能每行有10个空列,但如果获取所有通知需要查询每种类型的

我开始实施MTI解决方案,并有一个基本问题。我有3个物理模型——短信通知、电子邮件通知、推特通知,它们是通知的子类。在我的代码中,有时我想说
Notifications.find(:all)
,这样我就可以得到一组按创建时间排序的结果。然后我想根据它们的子类做一些事情。编写
通知的方法是什么。查找(:all)
并让Rails查看子类表并合并结果?现在Rails仍然认为我有一个物理通知表,这与我的MTI设计背道而驰

我也在考虑是否应该改用STI。我可能每行有10个空列,但如果获取所有通知需要查询每种类型的通知,那么我觉得这可能是一个大问题


谢谢

是的,每种类型都需要单独的查询。如果这是一个交易破坏者,那么您应该使用STI或您在上一个问题中提倡的混合模型方法

为此,您可以使子类与某些特定模型(X)具有多态关联。您可以在初始化后编辑回调,以便在创建时将此特定模型X的一个条目与每个子类相关联。通过这种方式,您可以对上述多态关联的目标(X)执行find。

我最近提出了一个很有希望的项目,在Rails中实现多表继承和类继承。我花了几天时间对其进行快速开发、修复、注释和文档编制,并将其作为CITIER类继承和Rails表继承嵌入重新发布

我认为它应该允许您通过请求所有通知来执行所需操作,它仍然会返回正确的模型。如果你要做这样的事情

Notification.all().each do |n|
  if n.class == 'EmailNotification'
    #Do something
  end
end
甚至在根通知类中定义一个函数并在子类中重载它以返回不同的结果

考虑看一看:

我发现它非常有用!顺便说一句,我欢迎社区在问题和测试、代码清理等方面提供任何帮助!我知道这是很多人都会欣赏的

但是,请确保您定期更新,因为正如我所说,它每天都在改进/发展。

如果您使用:


再次感谢你的回复,迈克。我认为STI会做得更好。现在就试试吧。。。
rails g model notification notification_type:string notification_id:integer <other columns>
rails g model email_notification <columns>

class EmailNotification < ActiveRecord::Base
    acts_as :notification
end
....
Notification.all.each do |n|
  case n.notification_type
  when "EmailNotification"
    ...
  when "SMSNotification"
    ...
  end
end