我正在尝试添加一个非常简单的数据输入表单,一个允许用户将文件上传到服务器文件系统的按钮,以便该文件的 url 可以放置在数据库的字段中。
到目前为止,我已经解决了在 _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的 ruby 指南中,我被告知要添加以下内容:
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 如何连接到那个“上传”动作。我可以在日志中看到按钮按下接受文件名等,但没有迹象表明文件上传已开始或尝试。
我已经阅读了许多参考资料,它们似乎都说您需要这两件事,但是(对我而言)它们并没有将这些点联系起来。是的,我对 Ruby/Rails 很陌生,所以我显然缺少一些基本的东西。