3

我有一张存储有关酱汁信息的表格。每个酱汁在图像资产文件夹中都有一个图像,在一个名为酱汁的文件夹中。所有酱汁文件的名称都相同;例如assets/images/sauces/sauces_piri.png

我想要做的基本上就是以创建发生的形式上传一个 .png 文件,并在 pic_url 的字段中存储图像的名称以及调味汁/因此当我想显示时正确定向图片。

目前管理员必须使用域文件管理将图像物理上传到正确的位置,并且在创建新酱时还要输入“酱汁/酱汁名称.png”。

添加新酱的表格:

<%= error_messages_for(@sauce) %>
   <table summary="Sauces Form Fields">
    <tr>
     <th><%= f.label(:name,"Sauce Name") %></th>
     <td><%= f.text_field(:name) %></td>
    </tr>
    <tr>
     <th><%= f.label(:description, "Description") %></th>
     <td><%= f.text_area(:description, :size => '40x5') %></td>
    </tr>
    <tr>
     <th><%= f.label(:heat_level, "Heat Level") %></th>
     <td><%= f.select(:heat_level,{ 1 => "1", 2 => "2", 3 => "3", 4 => "4", 5 => "5"}) %></td>
   </tr>
   <tr>
    <th><%= f.label(:pic_url, "Picture URL") %></th>
    <td><%= f.text_field(:pic_url) %></td>
   </tr>
   <tr>
    <th><%= f.label(:title_colour, "Title Colour") %></th>
    <td><%= f.text_field(:title_colour) %></td>
   </tr>
   <tr>
    <th><%= f.label(:description_colour, "Desc Colour") %></th>
    <td><%= f.text_field(:description_colour) %></td>
   </tr>
  </table>

因此,如果不使用回形针等插件,如何启用图像上传,然后将文件存储在正确的位置,并且在表字段中存储文件夹pic_url名称/文件名.png?

4

1 回答 1

2

我不清楚你有什么问题。所以,我将发布一个关于上传文件的示例表单。

<%= form_for(:uploaded_data_file, :url => upload_files_path(:params => params) ,  :remote => true, :html => { :multipart => true } ) do |f| %>
  <%= f.label "Upload" %><br />
  <%= f.file_field :location %>
<% end %>

您必须为将在此示例中存储图像的函数定义路径,它被调用upload_files_path,我们将所有params. 然后重新启动 webapp 以获取新路由。

在控制器中,您可以保存文件及其详细信息

获取文件名

params[:uploaded_data_file][:location].original_filename

获取文件本身并保存

File.open("where/to/save", "wb") { |f| f.write(params[:uploaded_data_file][:location].read) }

为了确保它是 .png,您可以进行一些正则表达式检查

if(name =~ /.png$/i) # for more than one type do (name =~ /.jpeg$|.png$/i)

要执行其他操作,请查看您的内容params并进行所需的更改。

对于工作路线,您可以查看http://edgeguides.rubyonrails.org/routing.html#adding-more-restful-actions

resources :posts do
  collection do
    get :upload_files # will create upload_files_posts_path
  end
end

或者

match '/upload_files', :to => 'controller_name#method_name' # 'posts#upload_files'

或者

<% form_tag({:action => 'upload_file'}  #will use the correct controller based on the form
于 2012-11-16T18:40:00.197 回答