• 关联方法(例如has_manybelongs_to定义的方法)是否使用ActiveRecord::Relation
  • 如果是这样,是否有可能获取正在使用的ActiveRecord::Relation对象。

  • 我们都知道,在使用Query Interface创建查询时,Rails 3在后台大量使用ActiveRecord::Relation对象和Arel::Relation对象。每当我们使用查询接口(interface)的selectjoins等方法时,都会返回ActiveRecord::Relation对象。但是,在调用模型的关联方法时似乎并非如此。而是立即执行查询,并返回关联模型的一个实例或实例数组。

    考虑以下模型:
    post.rb
    class Post < ActiveRecord::Base
      belongs_to :user
    end
    
    user.rb
    class user < ActiveRecord::Base
      has_many :posts
    end
    

    例:
    u = User.first
    u.posts
    

    调用u.posts返回的是帖子数组,而不是ActiveRecord::Relation的实例。我想知道是否有可能获得关联正在使用的ActiveRecord::Relation,是否可以使用Arel::Table完全使用它?

    我想要ActiveRecord::Relation的理由应该很明显:这是因为我想链接现有的关联并操纵查询以适应不同的目的。

    最佳答案

    几分钟后,我使用了where(nil) hack,然后脑筋急转,尝试了一些随机操作:

    User.first.posts.scoped
    

    而已! :D

    是的,Rails + Arel的文档确实很少。期待它成熟到可以实际查找并获得实际答案的地步。

    关于activerecord - 是否有可能获得ActiveRecord::Relation对象的关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4176716/

    10-10 09:20
    查看更多