1

我环顾四周,我无法弄清楚为什么这是有效的。我允许用户注册,一开始不需要他们上传头像。但是,如果他们愿意,他们可以在注册后上传头像。我允许他们在“配置文件”控制器中编辑他们的头像,而不是在用户控制器中。但是,头像不会更新。我正在为用户使用设计。下面的代码

<%= form_for edit_user_path(current_user.id), :html => { :multipart => true } do |form| %>
  <%= form.file_field :avatar %>
  <%= form.submit "upload" %>
<% end %>

在用户控制器中,我有这个:

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

我收到此错误:# 的未定义方法“名称”

请求中传递的参数如下

{"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"}
4

1 回答 1

3

更新属性是在内部完成的def update,而不是def edit. 这是为了渲染表单。

profiles_controller.rb

def update
    @user = User.find(params[:id])
    @user.update_attribute(:avatar, params[:user][:avatar])
end

应该管用。

于 2013-06-22T14:25:21.473 回答