在 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”的主要内容,如果未能解决你的问题,请参考以下文章