首页 > 解决方案 > 在 Rails 中调用类方法很困难。有其他可以正常工作的类方法

问题描述

所以我正在尝试编写一个类方法来使用邮件程序类发送 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 服务器,但我认为我什至不应该这样做?

任何帮助表示赞赏。我已经做了一百万次而没有问题的事情遇到问题是非常令人沮丧的。

标签: rubyclass-methodnomethoderror

解决方案


Rails 通常会在更改时重新加载任何内容,app/但是config/routes.rb在某些情况下,该类无法正确重新加载并且旧版本的缓存版本被卡住。这通常是由Spring引起的,它试图保持最新但有时可能会不同步。

通常的解决方法是:

spring stop

如果它给您带来很多麻烦,您也可以禁用它。Rails 的启动时间可能会慢一些,但这对您来说可能不是问题。


推荐阅读