自定义资源路由和上传

时间:2015-08-11 18:00:29

标签: ruby-on-rails ruby forms upload attachment

我已阅读并关注此主题的许多不同问题和论坛,但有些事情是不对的。我正在尝试做一个简单的图片上传。我认为:

<div class="row">
    <div class="col-sm-6">
      <%= form_tag("/beers/newCal", method: "get", multipart: true) do %>
      <%= label_tag(:q, "Enter date (dd/mm): ") %>
      <%= text_field_tag(:date) %>
      <br/>
      <%= label_tag(:q, "Enter event name: ") %>
      <%= text_field_tag(:event) %>
      <br/>
      <%= submit_tag("Create Calendar Event") %>
      <br /> <br />
     <% end %>
     <%= form_tag("/beers/upload", multipart: true) do %>
        <%= file_field_tag 'picture' %>
     <% end %>
</div>

并在我的控制器中

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

我可以选择要上传的图片,但不会保存在#{Rails.root} / public / uploads目录中。文件名未写入或任何内容。当我注释掉上传函数定义时,我没有收到错误(我预期的错误)。

在我的路线文件中,我尝试了

get 'beers/upload'

resources :beers

我尝试了很多不同的组合,但这是我看到的最基本的方式。

我在Amazon Ubuntu EC2上使用ruby版本2.1.5p273和rails版本4.1.8。请告诉我我做错了什么。

1 个答案:

答案 0 :(得分:0)

您的第二个表单中没有提交按钮 - 您如何提交?只选择一个文件不会提交。

此外,您的操作应该是帖子请求,请尝试

post 'beers/upload', to: 'beers#upload'

甚至更教条<​​/ p>

resources :beers do
  collection do
    post :upload
  end
end