在我的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。这个网站可能有不同的用户同时运行,因此保持全局变量对我来说听起来不合适。
答案 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。这个网站可能有不同的用户同时运行,所以保持一个全局变量听起来不适合我。