ruby-on-rails - Book.all 类和一系列书籍之间的区别

标签 ruby-on-rails ruby

我有一个名为 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/

相关文章:

ruby - Watir/Rspec 浏览器循环

ruby - 使用curl下载需要登录的文件

javascript - Rails + Bootstrap 选项卡

ruby-on-rails - mongoid嵌入式文档回调

ruby-on-rails - Rails App 谷歌索引

ruby-on-rails - 如何在具有 belongs_to/has_many 关系的 Active Admin 索引中显示关联模型的属性 (Rails 3.2/Active Admin)

ruby-on-rails - 如何在ransack上设置带有字段名称的默认条件?

sql - 将 ruby​​ 与数据库一起使用,但没有 rails

ruby-on-rails - rails 协会 - has_many 与 has_and_belongs_to_many

ruby-on-rails - 如何使用 Rails ActiveRecord 执行 LEFT OUTER JOIN?