Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 类Book.all和一系列书籍之间的差异_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 类Book.all和一系列书籍之间的差异

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

我有一个名为Book的类,它有一个方法
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