我正在努力在我的Rails应用中向用户模型添加个人资料图片。我已经获得了成功使用其他模型的截图,但出于某种原因,我在配置文件图片方面遇到了很多困难。为了处理个人资料图片,我创建了一个新的ProfilePics模型:
class ProfilePic < ActiveRecord::Base
attr_accessible :image, :user_id
has_attached_file :profile_pic, :default_url => "/system/user_profile_pics/profile.png",
:url => "/system/user_profile_pics/:id/:basename.:extension",
:path => ':rails_root/public:url'
:styles => { :large => "800x400", :thumb => "36x36" }
# **** Associations ****
# State that each profile picture can have an associated user
belongs_to :users
# **** Validations ****
# Only allow the user to upload .bmp, .gif, .jpg, .jpeg, and .png files
validates_attachment_content_type :image, :content_type => /^image\/(bmp|gif|jpg|jpeg|png)/
# Validate the presence of the user id
validates :user_id, :presence => true
# Order all profile pictures by ID, from first to last
default_scope :order => 'profile_pics.id ASC'
end
当用户注册时,他/她应该设置默认的个人资料图片。此图片是has_attached_file方法的:default_url参数中指定的图像文件。但是,在创建用户之后,我似乎无法弄清楚如何在控制器中为用户分配默认的配置文件图片。我不想将配置文件图片添加到注册表单,如果我只是从控制器中省略它,我收到以下错误消息:
undefined method `before_image_post_process'
我没有将个人资料图片作为用户创建的要求。我相信我已经设置了所有正确的数据库表,但由于某种原因我不断收到此错误。这是我尝试在控制器中为用户分配默认的个人资料图片:
if @user.save
# Create a profile picture for the user
@user.profile_pic = ProfilePic.new(:image => nil, :user_id => @user.id)
...
end
调试时,保存用户后立即在控制台中输入“@ user.profile_pic”会返回相同的'before_image_post_process'错误。
有没有人对此问题有任何见解?非常感谢你提前!
答案 0 :(得分:1)
您收到此错误是因为您将附件文件属性定义为profile_pic
,但您正在对image
属性进行回形针验证。
当您定义has_attached_file
属性时,Paperclip会自动创建一个<name>_post_process
回调,稍后会在验证中使用(其中has_attached_file
属性的名称)。
您创建了profile_pic_post_process
,但验证正在寻找image_post_process
,因此错误。
更改ProfilePic
模型中的验证行:
# Only allow the user to upload .bmp, .gif, .jpg, .jpeg, and .png files
validates_attachment_content_type :profile_pic, :content_type => /^image\/(bmp|gif|jpg|jpeg|png)/