我试图这样做,但没有成功。考虑选择默认照片是每个社交网络的一个选项,也没有覆盖这个的帖子很奇怪。我有CarrierWave宝石,我想设置它,以便用户可以从他们已经上传的照片中选择他们的ProfileImage(默认图像)。这张照片将在网站上使用。这就像拥有一个头像,但那里的文章只显示如何上传一个头像,而不是从你上传的照片中选择一个头像。我相信这会对其他人有所帮助,因为这是一个常见的功能。
照片控制器:
def new
@photo = Photo.new
end
def create
@photo = Photo.new(params[:photo])
@photo.user = current_user
if @photo.save
flash[:notice] = "Successfully created photos."
redirect_to :back
else
render :action => 'new'
end
end
def edit
@photo = Photo.find(params[:id])
end
def update
@photo = Photo.find(params[:id])
if @photo.update_attributes(paramas[:photo])
flash[:notice] = "Successfully updated photo."
redirect_to @photo.gallery
else
render :action => 'edit'
end
end
def destroy
@photo = Photo.find(params[:id])
@photo.destroy
flash[:notice] = "Successfully destroyed photo."
redirect_to @photo.gallery
end
end
用户模型:
# It is setup so no gallery is created, and photos are associated with the user.
private
def setup_gallery
Gallery.create(user: self)
end
照片模特:
attr_accessible :title, :body, :gallery_id, :name, :image, :remote_image_url
belongs_to :gallery
has_many :gallery_users, :through => :gallery, :source => :user
belongs_to :user
mount_uploader :image, ImageUploader
LIMIT = 5
validate do |record|
record.validate_photo_quota
end
def validate_photo_quota
return unless self.user
if self.user.photos(:reload).count >= LIMIT
errors.add(:base, :exceeded_quota)
end
end
end
答案 0 :(得分:4)
您可以将用户模型设置为直接链接到默认照片。
class User < ActiveRecord::Base
belongs_to :default_photo, :class_name => "Photo"
end
您还需要在users表中添加default_photo_id
列。
然后提供一个界面,允许用户浏览他们的所有照片。在UI中你可以有一个按钮,显示“默认”(或其他),当用户点击该按钮时,它会触发一个类似于这样的控制器动作:
def choose_default_photo
@photo = Photo.find params[:photo_id]
current_user.default_photo = @photo
redirect_to '/profile' # or wherever you wan to send them
end
然后,只要您需要引用默认照片的模型,您就可以使用:
current_user.defaut_photo
答案 1 :(得分:0)
当您销毁默认图片时,您还应该注意这一情况。如果需要,你应该将default_photo_id设置为nil或任何其他照片。