从Rails导出CSV数据

AnA*_*ice 3 csv ruby-on-rails ruby-on-rails-3

我正在努力从rails导出csv数据.我在这里按照教程:http://railscasts.com/episodes/362-exporting-csv-and-excel? view= asciicast

在我的控制器中我有:

  def show
    # @company is being provided correctly.
    @groups = @company.groups
    render text: @groups.to_csv
  end  
Run Code Online (Sandbox Code Playgroud)

在我的group.rb模型中:

  def self.to_csv
    Rails.logger.info "Hello World"
    CSV.generate do |csv|
      csv << column_names
      all.each do |product|
        csv << product.attributes.values_at(*column_names)
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

问题是浏览器输出的内容如下:

#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
Run Code Online (Sandbox Code Playgroud)

即使在重新启动rails之后,模型方法似乎也被忽略了.任何想法在这里有什么问题?谢谢

Ben*_*Hao 8

to_csv是一种类方法.意思是它意味着被称为Group.to_csv.您可能希望将方法签名更改为类似的Group.to_csv(groups)方式.

 def self.to_csv(groups)
    Rails.logger.info "Hello World"
    CSV.generate do |csv|
      csv << column_names
      groups.each do |product|
        csv << product.attributes.values_at(*column_names)
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后进去 show

  def show
    # @company is being provided correctly.
    @groups = @company.groups
    render text: Group.to_csv(@groups)
  end  
Run Code Online (Sandbox Code Playgroud)

  • 在关联上使用类方法没有错.Rails为您量身定制.http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html (3认同)