为什么我不能使用CarrierWave更新图像?

时间:2012-02-13 01:09:49

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

我在更新图片时遇到问题,用户的头像。我使用的是CarrierWave,有两种型号:profileuser

user#show页面上,我有profile的表单,其中我有file_field。个人资料属于User。这是表格:

<%= form_for @user.profile do |f| %>
      <%= f.file_field :avatar %><br/>
      <%= f.submit "Change Avatar"  %><br/>
      <% end %>

提交后,图片不会更新。在服务器日志中,我看到:

Processing by ProfilesController#update as HTML   Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"lHbhHK9SLIiTUuBJAAUyz0CSSC1tUhbE0oD2An2QEEY=",
"profile"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0x007fa60ff43b40
@original_filename="P1010056.JPG", @content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"profile[avatar]\";
filename=\"P1010056.JPG\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/kq/gjn7ljfx1wx418ptwnbb46vr0000gn/T/RackMultipart20120213-2399-sm0m9c>>},
"commit"=>"Change Avatar", "id"=>"1"}

这是我的个人资料更新操作:

def update
  @profile = current_user.profile
  if @profile.update_attributes(params[:profile])
    redirect_to user_path(current_user)
  end
end

我做错了什么?

1 个答案:

答案 0 :(得分:4)

确保表单中的multipart属性设置为true:

<%= form_for @user.profile, :html => {:multipart => true} do |f| %>
  <%= f.file_field :avatar %><br/>
  <%= f.submit "Change Avatar"  %><br/>
<% end %>

您是否还检查过是否为模型中的头像属性设置了attr_accessible?您的模型可能未启用质量分配。请确保您的Profile型号中包含此内容:

attr_accessible :avatar, :avatar_cache, :remove_avatar