Я предполагаю, что есть ресурс для List
с атрибутом name
в качестве имени списка и списка has_many
Элемент, имеющий атрибут description
Сначала создайтепуть загрузки измените ваши маршруты config/routes.rb
resources :lists do
member {get "download"}
end
Теперь, если вы запустите rake routes
в консоли, вы увидите маршрут, подобный
/lists/:id/download
Что еще у вас должно бытьпомощники download_list_url
& download_list_path
для использования в вашем представлении, такие как
<ul>
<% @lists.each do |list| %>
<li> <%= list.name %> - <%= link_to 'Download List', download_list_path(list) %> </li>
<% end %>
</ul>
В вашем lists_controller
добавьте действие, и, поскольку вы на самом деле не хотите сохранять файл на диске сервера, просто выполните потоковую передачуданные в виде строки
def download
list = List.find(params[:id])
send_data list.as_file,
:filename => "#{list.name}.txt",
:type => "text/plain"
end
Наконец, вы видите, что я использовал метод as_file
, который вы должны добавить в модель (я предпочитаю не делать этого в контроллерах, толстых моделях, тощих контроллерах).Так в List
модели
def as_file
output = [self.name]
self.items.each {|item| output << item.description }
output.join("\n")
end