Rails(4)范围在子模型上返回所有记录

时间:2013-07-30 14:59:24

标签: ruby-on-rails activerecord ruby-on-rails-4

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

预期感谢

2 个答案:

答案 0 :(得分:3)

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

scope :created_desc, lambda { order('created_at DESC') }

答案 1 :(得分:1)

你可以使用 - >太

scope :created_desc, -> { order('created_at DESC') }