Я думаю, вы смешиваете маршруты ресурсов с именованными маршрутами.
С именованным маршрутом
Маршрут:
map.file_cleanup '/file_cleanup', :controller => 'documents', :action => 'file_cleanup'
Впредставление, передайте имя файла в качестве параметра к ссылке URL:
link_to "Del", file_cleanup_path(:filename => str)
Затем в контроллере используйте params[:filename]
, чтобы получить значение:
File.delete("#{RAILS_ROOT}/public/downloads/#{params[:filename].gsub /[^\.\w]/, ''}")
С маршрутом ресурса
В маршруте добавьте новый метод члена:
map.resources :documents, :member => { :file_cleanup => :get }
В представлении вы используете имеющуюся ссылку:
link_to "Del", file_cleanup_document_path(str)
В контроллере используйте params[:id]
, чтобы получить значение:
File.delete("#{RAILS_ROOT}/public/downloads/#{params[:id]}")
Предупреждение:
Как указывает Дэн, напрямую используя изменяемое пользователем значениев File.delete
это действительно плохая идея.Вот ссылка на руководство Rails по очистке имен файлов:
http://guides.rubyonrails.org/security.html#file-uploads