Rails将散列数组导出到csv

时间:2016-06-15 23:13:58

标签: ruby-on-rails ruby csv

在我的show路由中,有一条my_search路由(基本上是show#my_search),它以HTML格式显示数据哈希数组。

我需要做的只是将@data转储到我的render(或部分)并在视图中处理它们,使其成为带有嵌入式ruby的HTML表。

但是,有一种简单的方法可以将相同的@data发送到CSV文件吗?我是否必须再次获得@data并专门为此制作另一条路线?在显示页面@data时,它是否可以访问localhost://show/my_search(最好是在下载其CSV或json渲染的链接中)?

编辑:

@data看起来像:

@data = [ {"name"=>"John", "age"=>"21"}, {"name"=>"Amy", "age"=>"20"} ]

app/controllers/show_controller.rb看起来像:

def my_search
    @data = [ {"name"=>"John", "age"=>"21"}, {"name"=>"Amy", "age"=>"20"} ] # and other rows
    # and do other stuff here

    render "table_template"
app/views/show/table_template.html中的

看起来像:

<table>
  <thead>
  <tr>
    <th>Name</th>
    <th>Age</th>
  </tr>
  </thead>

  <tbody>
  <% @data.each do |row| %>
      <tr>
        <td><%= row['name'] %></td>
        <td><%= row['age'] %></td>
      </tr>
  <% end %>
  </tbody>
</table>

2016年6月20日更新:我当前的工作:

app/controllers/show_controller.rb

def my_search
     get_data
    # and do other stuff here

    render "table_template"
end

def my_search_export
    get_data 
    format.each do |format|
    # something that renders the CSV format when visiting localhost://my_search_export.csv
        .....
    end
end




private
def get_data # writes to @data
    @data=[ {"name"=>"John", "age"=>"21"}, {"name"=>"Amy", "age"=>"20"} ]
end

在视图中:向localhost://my_search_export.csv添加网址。

糟糕的是它再次加载数据,好处是工作流程很简单。我仍在寻找更好的解决方案。

P.S。这个网站可能有不同的用户同时运行,因此保持全局变量对我来说听起来不合适。

2 个答案:

答案 0 :(得分:2)

如果您愿意,可以打开CSV并在render之前写信给它:

@data = { first_stuff: ['a', 'b', 'c'], second_stuff: [1, 2, 3] }
CSV.open('some/file.csv', 'w') do |csv|
  @data.each_pair do |key, value|
    csv << value
  end
end
render json: @data

......等等。如果不知道你的@data是什么样的话,很难更具体,但我希望有所帮助!

答案 1 :(得分:0)

2016年6月20日更新:我当前的工作:

应用程序/控制器/ show_controller.rb:

def my_search      GET_DATA     #并在这里做其他事情

render "table_template"

def my_search_export     GET_DATA     format.each do | format |     #访问localhost://my_search_export.csv时呈现CSV格式的内容         .....     结束 端

私人 def get_data#写入@data     @ data = [{“name”=&gt;“John”,“age”=&gt;“21”},{“name”=&gt;“Amy”,“age”=&gt;“20”}] 结束 在视图中:将一个URL添加到localhost://my_search_export.csv。

糟糕的是它再次加载数据,好处是工作流程很简单。我仍在寻找更好的解决方案。

P.S。这个网站可能有不同的用户同时运行,所以保持一个全局变量听起来不适合我。