Использование параметра :method
неверно. Это следует использовать для указания http глаголов. Документация здесь:
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
Я бы предложил использовать блок respond_to
в действии, когда они просматривают динамическую форму, и использовать format.csv
. Это позволяет вам использовать то же действие, но отображать результаты в другом формате, просто вызывая URL-адрес действия с добавлением .csv к URL-адресу
respond_to do |format|
format.html
format.csv { render :text => @dynamic_form.to_csv} #this will return txt in browser
#format.csv { render :csv => @dynamic_form.to_csv} #with mime type (should prompt browser download)
end
Затем в вашей модели формы вы можете создать определение to_csv, которое будет отрисовывать CSV и возвращать его в виде строки. Вы действительно не должны помещать какую-либо логику в свой контроллер. Контроллеры предназначены для создания переменных экземпляра (где логика создания должна выполняться в моделях) и пересылки в соответствующие представления. Модель должна содержать основную часть вашей логики. Google "тощие контроллеры, толстые модели" для получения дополнительной информации об этом.
def to_csv
csv = some_logic_here_to_create_csv_string
csv
end
Ваш вызов link_to, вероятно, выглядел бы так (просто записал это на макушке головы. Не могу вспомнить, правильный ли это синтаксис):
<%= link_to 'Download CSV', form_form_results_path(@form, :format=>:csv) %>