0

我有 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 过滤的评论上添加另一个范围是一种会被嘲笑的方法。那么正确的方法是什么?

期待的感谢

4

2 回答 2

3

问题是,不使用 lambda(=> 延迟评估)的范围已被弃用,并且似乎在 Rails 4 中产生了奇怪的行为。这很有效,只是在 Rails 4 应用程序中测试了两种方式:

scope :created_desc, lambda { order('created_at DESC') }
于 2013-07-30T15:11:51.470 回答
1

you can use the -> too.

scope :created_desc, -> { order('created_at DESC') }
于 2013-07-30T15:42:40.190 回答