2014-10-29 82 views
0

大家好!我有一个视图show,其中显示可下载文件的链接。我有一个方法 - download_file发送该文件Rails如何在方法之间传递对象

def download_file 
@myfile = Myfile.find(params[:myfile]) <======this line does not work 
    send_file Rails.root.join(@myfile.myfile_directory, "file.csv"), :type=>"application/csv", :x_sendfile=>true 
    flash[:notice] = "Your file has been downloaded" 
end 

我的问题是 - 如何传递MYFILE对象控制器download_file方法从视图中show? 我的观点

<td><%= @myfile.myfile_name %></td> 
    <%= link_to "Download file" , :action => 'download_file' %> 
<%= link_to 'Edit', edit_myfile_path(@myfile) %> 

我在控制器曾尝试:

@myfile = Myfile.find(params[:myfile]) 
@myfile = Myfile.find(params[:myfile]).first 
@myfile = Myfile.find(params[:id]) 
@myfile = Myfile.find(params[:id]).first 

它不工作。 非常感谢您的帮助!

回答

0

在你routes.rb你需要

resources :myfiles do 
    member do 
    get :download_file 
    end 
end 

然后,你的看法<%= link_to "Download file" , download_file_my_file_path(@myfile) %>内。对于路由名称,请检查rake routes的输出以获取正确的路径名称,因为我可能会误解。

+0

嗨!感谢您的帮助!我尝试了它,并得到错误,未定义的方法'[]为零:NilClass' – 2014-10-29 17:23:53

+0

它抛出...? – blelump 2014-10-29 17:27:47

+0

刚刚发现'download_file_my_files_path(:id => @ myfile.id)'工作正常! – 2014-10-29 17:29:50