我在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;也可以在上面调用)。任何有关正在发生的事情的想法都表示赞赏!我怀疑这张照片实际上没有上传或我的参数错误 - 我只是不知道在哪里。
答案 0 :(得分:0)
由于我没有对您的帖子发表评论的声誉,我不得不将其作为答案。我正在查看file_field_tag的示例,它没有参考您在使用的视图中使用的语法&#39; upload [picture]&#39;然后尝试将其作为参数中的哈希值进行访问。我会尝试在视图中使用以下内容:
file_field_tag 'picture'
并在控制器中使用:
the_file = params[:picture]