in my show
route, there is a my_search
route (basically show#my_search
) that shows an array of hashes of data in HTML.
What I need to do is just dump @data
into my render
(or partial) and deal with them in views, making it a HTML table with embedded ruby.
However, is there a easy way to send the same @data
to a CSV file? Do I have to get the @data
again and make another route specially for it? Is it a way to access the @data
(preferably, in a link to download its CSV or json render) when showing the page localhost://show/my_search
?
Edit:
The @data
looks like:
@data = [ {"name"=>"John", "age"=>"21"}, {"name"=>"Amy", "age"=>"20"} ]
The app/controllers/show_controller.rb
looks like:
def my_search
@data = [ {"name"=>"John", "age"=>"21"}, {"name"=>"Amy", "age"=>"20"} ] # and other rows
# and do other stuff here
render "table_template"
in app/views/show/table_template.html
looks like:
<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>
Update 6/20/2016: my current 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
in view: add a url to localhost://my_search_export.csv
.
Bad thing is it loads the data again, good thing is the workflow is simple. I am still looking for a better solution.
P.s. this website may have different user running at the same time so keeping a global variable doesn't sound right for me.