【发布时间】:2014-03-11 17:01:23
【问题描述】:
我安装了 Carrierwave 并按照说明使其工作,以便用户可以上传图像/头像。我的avatar_uploader.rb 看起来很正常,我并没有真正改变任何东西。
class AvatarUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"/images/"
end
version :thumb do
process :scale => [50, 50]
end
def extension_white_list
%w(jpg jpeg png)
end
end
我将图像标签添加到网站的用户编辑部分 (_form.html.erb),因为它是用户的一部分。
<%= image_tag(@user.avatar_url) if @user.avatar? %>
<p><%= f.file_field :avatar %></p>
<%= f.hidden_field :avatar_cache %>
和show.html.erb:
<%= avatar_tag user.avatar_url(:thumb) if @user.avatar? %>
我的users_controller.rb更新功能我没有做太多改变。
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
在这方面,user_params 似乎还可以。
def user_params
params.require(:user).permit(:username, :email, :full_name, :password, :password_confirmation, :avatar)
end
当我尝试使用编辑页面更新用户(即上传文件)时,它给了我一个错误
undefined method `update' for nil:NilClass
并指向我的 users_controller 文件的 if @user.update 部分。它似乎也将"id"=>"username" 作为参数。我有一个使用我的 routes.rb 文件的虚 URL
get "/:username", to: "users#show", as: "username"
但是当我单击更新用户按钮时,它会重定向回/users/username。我不确定这是导致它还是我没有正确实现头像上传。我觉得我在这里遗漏了一些简单的东西。
编辑:我的routes.rb 文件如下所示
根'home#index'
get "users/new"
get "/about" => "static_pages#about"
get "/contact" => "static_pages#contact"
get "/signedout" => "sessions#signout"
post "login" => "sessions#login"
resources :posts
resources :users
resources :sessions, only: [:new, :login, :signout]
match '/signin', to: 'sessions#login', via: 'get'
match '/signup', to: 'users#new', via: 'get'
match '/signedout', to: 'sessions#signout', via: 'delete'
get "/:username", to: "users#show", as: "username"
它还显示了以下请求参数:
Request
Parameters:
{"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"C2bHFQkNIjZ090wZhN4bLTJAl7Jqw4ZmRwyo3cmOQ5s=",
"user"=>{"username"=>"jsamson",
"email"=>"me@jsamson.com",
"full_name"=>"Jesse Samson",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"avatar_cache"=>""},
"commit"=>"Update User",
"id"=>"jsamson"}
【问题讨论】:
-
如果您使用的是包罗万象的通配符路由,则需要在
users#show操作中进行一些广泛的异常处理。只是一个观察 - 你可能已经这样做了...... -
我对此完全陌生,肯定有点过头了。你能详细说明一下吗?
-
你在这个问题上有很多东西要处理——我宁愿解决手头的问题。如果您想了解有关异常处理的更多信息,我建议您将其发布在另一个问题中。
标签: ruby-on-rails ruby-on-rails-4 carrierwave image-uploading