Rails 3,JRuby 1.6.7.2
我一直在尝试“基本”的东西,只需通过表单上传单个文本文件,以便在我的应用中进行处理。我看到的问题是,而不是StringIO或文件,我只得到一个文件名的字符串。
这是表单代码
= form_tag(:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post, :multipart => true) do
= label_tag "file"
= file_field_tag "upload[file]"
= submit_tag 'Analyze!'
控制器代码只是给我@upload一个包含文件名的字符串。
def file
@upload = params[:upload][:file]
render :template => 'api/file.html.haml'
end
在控制器中运行调试器会给我@ upload.class = String,它不会响应任何文件或StringIO方法,例如read。
答案 0 :(得分:22)
在这里找到答案。事实证明我只是搞砸了form_tag方法调用。您需要分离用于“url_for”的选项和其他选项,特别是多部分选项。
因此表单的正确代码是:
= form_tag({:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post}, {:multipart => true}) do
= label_tag "file"
= file_field_tag "upload[file]"
= submit_tag 'Analyze!'
感谢Rob Biedenharn五年前在ruby-forum上回答这个问题! http://www.ruby-forum.com/topic/125637