目前,如果我想将一个方法应用于一组 ActiveRecord 对象,我必须像这样构建调用:
messages = Message.find(:all)
csv = Message.to_csv(messages)
如何定义方法,使其结构如此?
messages = Message.find(:all)
csv = messages.to_csv
这是当前模型代码:
require 'fastercsv'
class Message < ActiveRecord::Base
def Message.to_csv(messages)
FasterCSV.generate do |csv|
csv << ["from","to", "received"]
for m in messages
csv << [m.from,m.to,m.created_at]
end
end
end
end
最佳答案
以下将在消息数组中包含的所有实例上调用 to_csv。
messages = Message.find(:all)
csv = messages.map { |message| message.to_csv }
在 Rails 中,在 Ruby 1.9 中或通过其他方式使用 Symbol#to_proc 时,您还可以将其缩短为:
csv = messages.map(&:to_csv)
当您想进行更复杂的操作时,较长的形式很有用:
csv = messages.map { |message|
if message.length < 1000
message.to_csv
else
"Too long"
end
}
关于ruby-on-rails - 如何使方法应用于 ActiveRecord 对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224128/