如何将file_field连接到rails应用程序中的上传操作

时间:2013-05-31 03:48:19

标签: ruby-on-rails ruby file-upload

我正在尝试添加一个非常简单的数据输入表单,一个允许用户将文件上传到服务器文件系统的按钮,以便该文件的URL可以放在数据库的字段中。 / p>

到目前为止,我已经知道在_form ... erb文件中,我可以添加file_field帮助器:

<%= form_for(@business) do |f| %>
<% if @business.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@business.errors.count, "error") %> prohibited this business from being saved:</h2>

<ul>
<% @business.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= f.label :deletedFlag %><br />
<%= f.check_box :deletedFlag %>
</div>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>

...

<div class="field">
<%= f.label :logoURL %><br />
<%= f.text_field :logoURL %>

    <%= f.file_field :imagefile %>
</div>

<div class="field">
<%= f.label :streetAddress %><br />
<%= f.text_area :streetAddress %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

这给了我一个带有“选择文件”按钮的表单。单击它可以选择文件。大。

现在,来自:http://guides.rubyonrails.org/form_helpers.html#uploading-files的红宝石指南我被告知要添加类似的内容:

def upload
  uploaded_io = params[:business][:imagefile]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
    file.write(uploaded_io.read)
  end
end

到我的控制器。

我还没有解决的是file_field如何连接到'upload'动作。我可以在日志中看到按钮按下接受文件名等,但没有迹象表明文件上传已启动或尝试。

我已经阅读了很多参考文献,他们似乎都说你需要这两件事,但(对我而言)他们并没有连接点。是的我对Ruby / Rails很新,所以我显然缺少一些基本的东西。

2 个答案:

答案 0 :(得分:1)

您可能需要设置路由,以便Rails可以将表单中的请求传递到您的控制器,然后设置表单以使用该路由:

# config/routes.rb
post '/upload' => 'mycontroller#upload'

# app/views/some_model/new.html.erb
<%= form_for something, url: upload_path do |f| %>
...

这可能是在Rails上处理文件上载的最不推荐的方法,尤其是对于新用户。相反,设置CarrierwavePaperclipDragonfly会更好。

答案 1 :(得分:1)

您是否忘记在form_for中指定multipart?

<%= form_for(@uploadfile, :html => {:multipart =>true}) do |f| %>

检查生成的表单html代码,你看到了吗?

<form ... enctype="multipart/form-data" ...>