在 after_save_filter 中生成 CSV 时未定义的方法“column_names”

Posted

技术标签:

【中文标题】在 after_save_filter 中生成 CSV 时未定义的方法“column_names”【英文标题】:Undefined method 'column_names' when generating CSV in after_save_filter 【发布时间】:2012-09-03 07:28:43 【问题描述】:

我想在用户创建帐户后生成 CSV 文件,因此我在 User 模型中创建了 after_save 过滤器,但出现错误。

这是我的代码:

    after_save :to_csv

    def to_csv(options = )
    require 'csv'
    CSV.generate(options) do |csv|
        csv << self.column_names//also tried User.column_names
        csv << self.attributes.values_at(*column_names)
    end
    end

但是当创建用户时我得到错误:

     undefined local variable or method `column_names' for #<User:0x326f778>       
     app/models/user.rb:52:in `block in to_csv'
     app/models/user.rb:50:in `to_csv'
     app/controllers/users_controller.rb:27:in `create'

为什么我会得到这个?我正在使用这个 railscast - http://railscasts.com/episodes/362-exporting-csv-and-excel。

【问题讨论】:

【参考方案1】:

column_names 是类的方法。你在实例上调用它。如果您真的想要column_names,请使用self.class.column_names

【讨论】:

你能建议我生成的文件在哪里吗?还尝试通过调用CSV.open("myfile.csv", "w") do |csv| 生成【参考方案2】:

试试self.attributes.keys,它返回列

【讨论】:

没有更多错误,谢谢。但是文件在哪里?还是我还没有生成?【参考方案3】:

我玩的有点晚了,但是这里是

self.attribute_names

为我做这项工作。

【讨论】:

以上是关于在 after_save_filter 中生成 CSV 时未定义的方法“column_names”的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 在C中生成随机数

如何在字典中生成所有可能的组合

在 C 中生成 MIDI 文件

csharp 在C#中生成一个随机数

我需要在 C 中生成随机数 [重复]

如何在C中生成随机浮点数