我正在使用CarrierWave,截至目前该画廊向公众开放,没有所有权。我想设置,以便用户不必创建一个图库。唯一的选择应该是上传照片到他们的帐户,我想限制每个用户照片上传到5最大。因此,如果用户16登录,他们可以选择上传5张照片到他们的个人资料。一旦达到这个限制,如果用户尝试上传更多,它应该说“上传的最大照片数量,删除上传更多”。我不确定如何解决这个问题。自定义画廊,以便它属于一个用户
photo.rb模型:
class Photo < ActiveRecord::Base
attr_accessible :title, :body, :gallery_id, :name, :image, :remote_image_url
has_many :user, :through => :gallery
has_many :gallery
mount_uploader :image, ImageUploader
LIMIT = 5
validate do |record|
record.validate_photo_quota
end
def validate_photo_quota
return unless self.user
if self.gallery.user(:reload).count >= LIMIT
errors.add(:base, :exceeded_quota)
end
end
end
相片控制器:
类PhotosController < ApplicationController中
def new
@photo = Photo.new(:gallery_id => params[:gallery_id])
end
def create
@photo = Photo.new(params[:photo])
if @photo.save
flash[:notice] = "Successfully created photos."
redirect_to @photo.gallery
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
画廊控制器:
class GalleriesController < ApplicationController
def index
@galleries = Gallery.all
end
def show
@gallery = Gallery.find(params[:id])
end
def new
@gallery = Gallery.new
end
def create
@gallery = Gallery.new(params[:gallery])
if @gallery.save
flash[:notice] = "Successfully created gallery."
redirect_to @gallery
else
render :action => 'new'
end
end
def edit
@gallery = Gallery.find(params[:id])
end
def update
@gallery = Gallery.find(params[:id])
if @gallery.update_attributes(params[:gallery])
flash[:notice] = "Successfully updated gallery."
redirect_to gallery_url
else
render :action => 'edit'
end
end
def destroy
@gallery = Gallery.find(params[:id])
@gallery.destroy
flash[:notice] = "Successfully destroy gallery."
redirect_to galleries_url
end
end
非常感谢您展示例子和解释得非常好,所以我可以学习!这工作完美。尽管在附注中,我创建了自己的授权/认证。不使用康康。 – pwz2000 2013-04-04 14:44:19
还有什么区别是使用单数vs.has_many的复数因为我使用单数而没有发生任何问题? – pwz2000 2013-04-04 14:52:57
它可能仍然有效(在某些情况下),但从长远来看,代码将是非标准的,对您或其他开发人员意义不大,并且可能会在Rails中破坏某些函数。例如:在你的代码中,'@ photo.gallery'将返回一个画廊列表。 '@ photo.galleries'会变得更有意义,你不觉得吗? – Jesper 2013-04-05 09:52:41