我有一个模型Section
,它有很多文章(Article
)。这些文章是版本化的(名为version
存储它们的版本号的列),我希望检索最新的。
从 section_id 2 检索所有文章的 SQL 查询是:
SELECT * FROM `articles`
WHERE `section_id`=2
AND `version` IN
(
SELECT MAX(version) FROM `articles`
WHERE `section_id`=2
)
我一直在尝试在Article
Model 类中创建一个命名范围,但没有成功:
named_scope :last_version,
:conditions => ["version IN
(SELECT MAX(version) FROM ?
WHERE section_id = ?)", table_name, section.id]
用于获取我需要的任何版本的命名范围如下所示:
named_scope :version, lambda {|v| { :conditions => ["version = ?", v] }}
我不想结束使用find_by_sql
,因为我试图尽可能保持高水平。欢迎任何建议或见解。提前致谢!