我有一个名为 Book 的类,其方法为 self.to_csv
.
这有效:
books = Book.all
books.to_csv
但是,如果我有一堆书,那就不会了。问题是如何使用数组获得相同的结果?
Book.all = [Book1,Book2]
myArray = [Book1,Book2]
有什么不同?
最佳答案
问题是如何使用数组获得相同的结果:
Book.where(id: [Book1, Book2]).class
# Book::ActiveRecord_Relation
问题是,你如何定义
to_csv
.如果它在类级别(即 Book 模型中的类方法),您将可以在 Post::ActiveRecord_Relation
中调用它时访问它。书,因为它通过 ActiveRecord 委托(delegate)工作: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
关于ruby-on-rails - Book.all 类和一系列书籍之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58803977/