в моем маршруте show
, есть маршрут my_search
(в основном show#my_search
), который показывает массив хэшей данных в HTML.Rails export array hash to csv
Что мне нужно сделать, это просто сбросить @data
в мой render
(или частично) и обработать их в представлениях, сделав его таблицей HTML со встроенным рубином.
Однако есть ли простой способ отправить тот же @data
в CSV-файл? Должен ли я снова получить @data
и сделать другой маршрут специально для него? Это способ получить доступ к @data
(желательно, по ссылке для загрузки CSV или json render) при показе страницы localhost://show/my_search
?
Edit:
@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>
Обновление 6/20/2016: мой текущий workround:
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
в виду: добавить URL в localhost://my_search_export.csv
.
Плохая вещь, она загружает данные снова, хорошо, что рабочий процесс прост. Я все еще ищу лучшее решение.
P.s. этот веб-сайт может работать одновременно с другим пользователем, поэтому сохранение глобальной переменной не подходит для меня.
Возможный дубликат [Выходной массив в CSV в Ruby] (http://stackoverflow.com/questions/4822422/output-array-to-csv-in-ruby) – Seth
Спасибо Сет, но как я вывожу CSV загружаемый ссылка при показе веб-страницы 'localhost: // show/my_search' –
http://stackoverflow.com/questions/94502/in-rails-how-to-return-records-as-a-csv-file может помочь - - но это только позволит перейти к 'localhosts: // some/path/file.csv', что означает, что он не показывает веб-страницы в' localhosts: // some/path/file.csv' –