使用回形针更新Ruby on Rails上的头像

时间:2013-06-22 14:09:47

标签: ruby-on-rails ruby-on-rails-3

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

<%= 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"}

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

应该有用。