【问题标题】:Difference between ActiveRecord's finder methods: take vs limit(1)ActiveRecord的finder方法的区别:take vs limit(1)
【发布时间】:2013-10-01 18:27:34
【问题描述】:

考虑 ActiveRecord 的以下查找器方法。

  • .take。例子。 Account.take
  • .limit(1) 示例。 Account.limit(1)

现在, 两种方法虽然名称不同,但生成的查询相同:

SELECT "accounts".* FROM "accounts" LIMIT 1

那么,.take.limit(1) 有什么区别?还是一样?

【问题讨论】:

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


    【解决方案1】:

    来自docs

    # File activerecord/lib/active_record/relation/finder_methods.rb, line 64
    def take(limit = nil)
      limit ? limit(limit).to_a : find_take 
    end
    

    take 返回记录的Array,而limit 返回可以与其他关系链接的 ActiveRecord 关系。

    【讨论】:

      【解决方案2】:

      根据the API documentation中的代码,区别在于limit返回的是Relation,而take返回的是Array

      要使用limit,你需要一个Relation,然后你就会得到一个关系。要使用take,您还可以使用数组(因为Array 也有take)并且您还可以得到Array。因此,如果您仍然想要Array,请使用take,您不必担心源对象是RelationArray

      【讨论】:

        【解决方案3】:

        limit(1) 将返回一个 ActiveRecord::Relation,这意味着您可以在其上链接更多内容(例如 Account.limit(1).where(...)

        take 将返回一个数组(来自已加载的查询,或者通过执行 limit(1) 并返回数组)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-26
          • 1970-01-01
          • 2019-07-05
          • 2016-09-26
          • 1970-01-01
          • 2019-10-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多