Rails - 迭代方法中的记录

时间:2013-07-23 22:18:38

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有一种方法可以遍历各种模型,打印出模型属性:

def self.get_attributes(options = {})
  options[:model_name].find(:all, :conditions => {:generated_at => options[:start_date]..options[:end_date]}).each do |p|
  puts p.options[:col_name]
end

调用方法:

start_date = DateTime.strptime(params[:start_date], '%m/%d/%Y').beginning_of_day.strftime("%Y-%m-%d %H:%M:%S")
end_date = DateTime.strptime(params[:end_date], '%m/%d/%Y').end_of_day.strftime("%Y-%m-%d %H:%M:%S")
get_attributes({:model_name =>  Revenue, :col_name => "revenue",  :start_date => start_date, :end_date => end_date})

我尝试将列名称作为字符串和变量传递。当作为变量传递时,我得到undefined variable异常。如上所述,我得到undefined method 'col_name'例外。如何在上述方法中插入列名?

1 个答案:

答案 0 :(得分:1)

您可以将列/方法名称表示为符号(例如:revenue),并使用__send__调用它,如下所示:

p.__send__(options[:col_name])