我环顾四周,我无法弄清楚为什么这样做。我允许用户注册,而不需要他们首先上传头像。但是,如果他们愿意,他们可以在注册后上传头像。我允许他们在“配置文件”控制器中编辑他们的头像,而不是在用户控制器中。但是,头像不会更新。我正在为用户使用设计。代码
<%= form_for edit_user_path(current_user.id), :html => { :multipart => true } do |form| %>
<%= form.file_field :avatar %>
<%= form.submit "upload" %>
<% end %>
在Users控制器中,我有这个:
def edit
@user = User.find(params[:id])
@user.update_attribute(:avatar, params[:user][:avatar])
end
在用户模型中,我有这个
has_attached_file :avatar, :styles => { :show => "150x150#" }, :default_url => 'missing_:style.png'
头像不会更新或保存。我不确定为什么。
使用新的表单代码进行更新:
<%= form_for current_user, :url => {:action => 'update'}, :html => { :multipart => true } do |form| %>
<%= form.file_field :avatar %>
<%= form.submit "upload" %>
<% end %>
在配置文件控制器中,我有:
def update
@user = User.find(params[:id])
@user.update_attribute(:avatar, params[:user][:avatar])
end
我收到此错误:#
的未定义方法`name'请求传递的参数在
下面{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"cxANtlyj+W+ykSnivfQTfTznkpt7yXe75E8jWI1IC+o=",
"user"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0x000001032ac7c8 @original_filename="pictester.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"pictester.png\"\r\nContent-Type: image/png\r\n",
@tempfile=#<File:/var/folders/x9/gvnnn6s9585gkxw40c51d3540000gn/T/RackMultipart20130622- 10366-a8ome3>>},
"commit"=>"upload",
"id"=>"1"}
答案 0 :(得分:3)
更新属性是在def update
内完成的,而不是def edit
。这是为了呈现表单。
在profiles_controller.rb
def update
@user = User.find(params[:id])
@user.update_attribute(:avatar, params[:user][:avatar])
end
应该有用。