Rails新手想知道为什么在Article类上调用find方法而不是实例模型。
@article = Article.find(params[:id])
由于我们要从Article类中实例化一个对象,但我们为什么要在Article类中调用find方法,即使Article.new
也是如此?
答案 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
,例如all
,where
,order
,limit
和offset
。这很好,因为你可以形成一个链:
Article.where(..) #=> Relation
Article.where(..).find(12) #=> record with id: 12 satisfying some additional requirements