【发布时间】:2012-03-03 20:24:15
【问题描述】:
我正在开发一个 Rails 3 应用程序,它(为了这个问题)Posts 链接到多个 Categories,反之亦然,通过 has_and_belongs_to_many 关联:
Post < ActiveRecord::Base
has_and_belongs_to_many :categories
end
Category < ActiveRecord::Base
has_and_belongs_to_many :posts
end
我正在尝试弄清楚如何编写一个 ActiveRecord(或 ARel)查找器来检索所有 Posts,其中 每个 Post 链接到两个 @ 中的 both 987654326@。我了解我最终要生成的 SQL(两个带有别名的 INNER JOINS 能够区分每个以匹配两个Categories),但到目前为止我还没有想出创建的方法查询而不使用原始 SQL 位。
在这种情况下避免自定义 SQL 如此重要的原因是,我编写的代码是通用的并且是数据驱动的,并且它需要在查询 Post 时与其他过滤(和排序)限定符混合使用对象,因此我不能只对Post 上的任一方法调用(例如访问Categories 的集合)或可能无法与其他过滤器生成的 SQL 很好混合的自定义 SQL 进行硬编码。
我愿意切换到使用连接模型 (has_many :through),如果这样可以让事情变得更容易,或者甚至查看其他 ORM 选项(DataMapper、Mongoid 等),但这似乎是一个巨大的变化让一些如此基本的工作。
我很惊讶这在 ActiveRecord/ARel 中并不容易/更明显,但也许我只是不知道要搜索以找到答案的神奇关键字。 ARel 的文档也非常少,所以我很茫然。任何帮助将不胜感激!
【问题讨论】:
标签: ruby-on-rails-3 activerecord has-and-belongs-to-many arel ruby-datamapper