我有一张表,存储有关酱汁的信息。每个酱都有一个图像资产文件夹内的图像,在一个名为酱料的文件夹中。所有酱料文件的名称相同;
例如assets/images/sauces/sauces_piri.png
我想要做的就是在创建发生的表单中上传一个.png文件,在pic_url的字段中,图像的名称与酱料一起存储/因此当我想要它时它被正确定向显示图像。
目前管理员必须使用域文件管理将图像物理上传到正确的位置,并在创建新酱汁时输入“sauces / sauces_name.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
中存储foldername / filename.png?
答案 0 :(得分: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