Rails date_select生成一个csv文件

时间:2011-07-11 17:59:25

标签: ruby-on-rails

我正在尝试导出新手用户电子邮件地址的CSV文件。新手是在date_select标签中选择的日期之后的用户“created_at”(基本上是最近的注册)。

我正在使用FasterCSV gem和Scott Becker's code,并借用here中的@start_date来实现该方法。

这是我的控制器的样子:

  def newbs_export
    @start_date = Date.civil(params[:range][:"start_date(1i)"].to_i, params[:range][:"start_date(2i)"].to_i, params[:range][:"start_date(3i)"].to_i)
    @users = User.find(:all, :if => [@created_at >= @start_date])

    csv_string = FasterCSV.generate do |csv|
      # header row
      csv << ["email"]

      # data rows
      @users.each do |user|  
      #if user[:created_at] >= Time.now
        csv << [user.email]
      end

    end

    # send it to the browsah
    send_data csv_string,
              :type => 'text/csv; charset=iso-8859-1; header=present',
              :disposition => "attachment; filename=newbs.csv"

  end

这是我的newbs.html.erb:

<% form_tag({:controller => "accounts", :action => "newbs_export"}, :method => "get") do %>
<%= date_select('range', 'start_date', :order => [:month, :day, :year])%>
<%= submit_tag("Submit") %>
<% end %>

我混合了代码并且挖了一个洞,试图将不同的解决方案拼接在一起。关于我可以从哪里去的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

我将从改变开始:

@users = User.find(:all, :if => [@created_at >= @start_date])

@users = User.where("created_at >= ?", @start_date)

对于rails3或

@users = User.find(:all, :conditions => ["created_at >= ?", @start_date])

对于rails2

如果您发布任何其他错误/问题,我会尝试更新此答案。