使用rails无法正常工作的照片上传,params [:photo]似乎返回nil并且无法调用original_filename

时间:2014-12-30 01:31:09

标签: ruby-on-rails ruby model-view-controller upload

我在rails中有这段代码:

控制器:

def new
  end

  def create
      the_file = params[:upload][:picture]
      @user = User.where("first_name = ?", session[:current_user_id]).first
      @photo = Photo.create(:date_time => DateTime.now, :file_name => the_file.original_filename, :user_id => @user.id)
      directory = "app/assets/images"
      path = File.join(directory, the_file.original_filename)
      File.open(path, "wb") do |f|
          f.write(the_file.read)
      end
      redirect_to "photos/index/" + @user.id.to_s
  end

和查看:

<% if session[:current_user_id] == nil%>
    <p class = "error" >You cannot upload a photo because you are not logged in. Please log in to continue.</p>
  <% else %>
    <p>
    <%= form_tag({action: :create}, multipart: true) do %>
    <%= file_field_tag 'upload[picture]' %>
    <%= submit_tag("Upload") %>
    <% end %>
  <% end %>

现在,我得到一个未定义的方法`[]&#39; for nil:NilClass错误,可能是因为第二个[:picture]被调用为nil。我几乎试过了params [:photo] [:upload]等的几乎所有变体,但似乎总是将params视为nil,或者返回一个长字符串(ActionController ...某些东西,但original_filename可以&#39;也可以在上面调用)。任何有关正在发生的事情的想法都表示赞赏!我怀疑这张照片实际上没有上传或我的参数错误 - 我只是不知道在哪里。

1 个答案:

答案 0 :(得分:0)

由于我没有对您的帖子发表评论的声誉,我不得不将其作为答案。我正在查看file_field_tag的示例,它没有参考您在使用的视图中使用的语法&#39; upload [picture]&#39;然后尝试将其作为参数中的哈希值进行访问。我会尝试在视图中使用以下内容:
     file_field_tag 'picture'
并在控制器中使用:
    the_file = params[:picture]

here is the link to the reference I mentioned