Ruby on rails 类Book.all和一系列书籍之间的差异
我有一个名为Book的类,它有一个方法Ruby on rails 类Book.all和一系列书籍之间的差异,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个名为Book的类,它有一个方法self.to\u csv。 这项工作: books = Book.all books.to_csv 但是如果我有一系列的书,它不会。问题是如何使用数组获得相同的结果 Book.all = [Book1,Book2] myArray = [Book1,Book2] 区别是什么?问题是如何使用数组获得相同的结果: 问题是,您如何定义到_csv。如果它位于类级别(即书籍模型中的类方法),则在通过ActiveRecord委派工作时,在Post::Activ
self.to\u csv
。
这项工作:
books = Book.all
books.to_csv
但是如果我有一系列的书,它不会。问题是如何使用数组获得相同的结果
Book.all = [Book1,Book2]
myArray = [Book1,Book2]
区别是什么?问题是如何使用数组获得相同的结果:
问题是,您如何定义到_csv
。如果它位于类级别(即书籍模型中的类方法),则在通过ActiveRecord委派工作时,在Post::ActiveRecord\u关系中调用它时,您可以访问它:
Book.all.respond_to?(:to_csv)
# true
Book.all.method(:to_csv).source_location
# ["/Users/user/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/delegation.rb", 64] # or similar
而一系列的书就是这样,一系列的书。如果您没有接触Array类,则不会有一个to_csv
方法:
[Book1, Book2].class
# Array
[Book1, Book2].respond_to?(:to_csv)
# false
因此,没有方法定义:
[Book1, Book2].method(:to_csv).source_location
# NameError: undefined method `to_csv' for class `Array'
# Did you mean? to_s
在Rails中,.all
方法返回一个ActiveRecord\u关系
对象。
虽然此对象类型与数组
有一些相似之处,例如可枚举
继承的方法,但该对象不是数组
类的实际实例
简而言之,您确实不能也不应该期望Array
的实例表现得像ActiveRecord\u Relation
的实例
但你可能真正想做的是:
books = Book.where(id: [Book1.id, Book2.id])
这将返回一个ActiveRecord\u关系
对象。所以现在你应该能做到了
books.to_csv
也许你可以读一读
数组代码块中有一个输入错误。我不相信你的意图是Book.all=[Book1,Book2]
。这不应该是myArray=[Book1,Book2]
?
books.to_csv