为什么find方法引用模型类?

时间:2017-08-31 08:32:55

标签: ruby-on-rails ruby

Rails新手想知道为什么在Article类上调用find方法而不是实例模型。

@article = Article.find(params[:id])

由于我们要从Article类中实例化一个对象,但我们为什么要在Article类中调用find方法,即使Article.new也是如此?

1 个答案:

答案 0 :(得分:3)

Article与整个集合相关联。在find Collection上查找集合中的记录是合乎逻辑的。它比Article.new.load(params[:id])更清楚。

不仅如此,它被认为是一种常见做法,请考虑下一个例子:

class Article
  @@instances = []

  attr_accessor :name

  def initialize(name)
    @name = name
    @@instances << self
  end

  def self.find(name)
    @@instances.find { |i| i.name == name }
  end
end

article = Article.new('New Article')
Article.find('New Article') #=> #<Article:0x00000001668040>

关于Rails。 find是可以在模型或Relation上调用的方法之一。其中一些方法甚至会返回Relation,例如allwhereorderlimitoffset。这很好,因为你可以形成一个链:

Article.where(..) #=> Relation
Article.where(..).find(12) #=> record with id: 12 satisfying some additional requirements