使用PaperClip更新配置文件图片(Rails 4)

时间:2014-08-12 19:42:19

标签: ruby-on-rails ruby paperclip

我遇到了一些问题,例如,为当前登录的用户更新个人资料图片。

#form for the picture
    <%= form_tag '/update_profile_pic/'+user.id.to_s, method: :put, html: { multipart: true } do %>
        <%= label_tag :avatar %>
        <%= file_field_tag :avatar %>
        <%= submit_tag("Update", class: "btn btn-primary") %>
    <% end %>

#users_controller.rb
class UsersController < ApplicationController
    def update_profile_pic
        @user = User.find(params[:id])
        @user.avatar = params[:avatar]
        if @user.save
            flash[:success] = "Profile picture updated."
        else
            flash[:danger] = "Failed to update profile picture."
        end
    end
end

#user.rb
class User < ActiveRecord::Base
    attr_accessbile :avatar

    has_attached_file :avatar, styles: { tiny: "30x30>", thumb: "50x50>", profile: "100x100>" }, 
    default_url: "/assets/images/users/:style/default.png",
    url: "/assets/images/users/:id/:style/:basename.:extension",
    path: ":rails_root/public/assets/images/users/:id/:style/:basename.:extension"

    validates_attachment_size :avatar, less_than: 5.megabytes
    validates_attachment_content_type :avatar, content_type: ["image/jpeg", "image/png"]
end

在将表单与所选图片一起提交后,我得到了这个例外:Paperclip::AdapterRegistry::NoHandlerError - No handler found for "me.jpg"。在注册时添加配置文件图片(即创建用户)可以正常工作,但是作为已登录用户更改图片不起作用。似乎@user.avatar = params[:avatar]似乎有点愚蠢。

2 个答案:

答案 0 :(得分:0)

尝试:

@ user.update_attributes(PARAMS)

答案 1 :(得分:0)

我刚注意到两件事:

  1. 来自注册和更新头像的呈现形式的标题在其多部分参数方面是不同的。从注册开始,它是enctype=multipart/form-date,而另一个只是html: { multipart: true }
  2. 由于项目#1,我注意到表单作为多部分的参数分别对form_forform_tag不同。
  3. 所以我改为html: { multipart: true }改为multipart: true

    #form for the picture
    <%= form_tag '/update_profile_pic/'+user.id.to_s, method: :put, multipart: true do %>
        <%= label_tag :avatar %>
        <%= file_field_tag :avatar %>
        <%= submit_tag("Update", class: "btn btn-primary") %>
    <% end %>
    

    无论从我所提供的内容和回答我的问题的人那里更新头像,这些都是有效的。