我有2个Rails 4.0模型:
class Article
has_many :comments
end
class Comment
belongs_to :article
scope :created_desc, :order => "created_at DESC"
end
我正在寻找的行为是能够按创建的范围对文章的评论进行排序。
然而这段代码
article = Article.find(1)
article.comments.created_desc
触发要运行的新SQL查询:
SELECT "comments".* FROM "comments" ORDER BY created_at DESC
我希望,考虑到代码运行文章评论的范围,只能获得属于该文章的评论,但是,我得到所有评论。
我觉得这很反直觉。任何人都可以建议正确的方法吗?有些东西告诉我,在条款id上过滤的评论中添加另一个范围是一种可以嘲笑的方法。那么正确的方法是什么?
预期感谢
答案 0 :(得分:3)
问题是,不使用lambda(=>延迟评估)的范围已被弃用,并且似乎在Rails 4中产生了奇怪的行为。这样做有效,只是在Rails 4应用程序中测试了两种方式:
scope :created_desc, lambda { order('created_at DESC') }
答案 1 :(得分:1)
你可以使用 - >太
scope :created_desc, -> { order('created_at DESC') }