【发布时间】:2020-09-02 19:34:42
【问题描述】:
所以我正在尝试编写一个类方法来使用邮件程序类发送 csv 文件。我想我已经把这个逻辑全部解决了,我遇到的问题是 NoMethodError。我已经在我的 Order 类中定义了方法(见下文):
class Order < ApplicationRecord
def self.to_csv
attributes = %w{ id customer_name, customer_email, street_address, city, state, zip_code, number_books }
orders = Order.where(Date.today.all_day)
CSV.generate(headers: true) do |csv|
csv << attributes
orders.each do |order|
csv << attributes.map { |attr| order.send(attr) }
end
end
end
end
我只是想在控制台中调用这个方法,看看它给了我什么样的输出。
我收到以下错误:
NoMethodError: undefined method `to_csv' for #<Class:0x00007fb7ef8a7560>
Did you mean? to_s
from /Users/mymac/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/activerecord-6.0.3.2/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
我还尝试编写任何简单的类方法,例如在控制台打印一个单词,但我得到了同样的错误。我已经重新启动了我的 Rails 服务器,但我认为我什至不必这样做??
感谢任何帮助。对于我已经做了一百万次而没有问题的事情遇到问题是非常令人沮丧的。
【问题讨论】:
-
self.method内的class不能在类的实例上调用,它们是类方法。我假设你已经初始化了一个Order的实例删除self并且你应该能够调用该方法。 -
我在终端中调用此方法,如下所示:“Order.to_csv”。我也遇到了与实例方法相同的错误。我只是尝试创建一个实例方法并在 Order (Order.first) 的单个实例上调用它并得到相同的错误。
-
我正在重新启动我的控制台,这也没有帮助。
-
在 Rails 中,自动加载器应该处理这样的事情,但如果它弄糊涂了,Spring 预加载器可能有问题,所以
spring stop可以帮助重置它。 -
总是禁用弹簧。春天永远不值得。
标签: ruby class-method nomethoderror