Я использую 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
Большое спасибо за демонстрацию примеров и объяснение очень хорошо, чтобы я мог учиться! Это работает отлично. Хотя на стороне записки, я создал свою собственную авторизацию/аутентификацию. Не использовать cancan. – pwz2000
Также в чем разница: используется сингулярное vs.множественное число для has_many, так как я использовал единственное число без каких-либо проблем? – pwz2000
Возможно, он по-прежнему работает (в некоторых случаях), но код будет нестандартным и будет иметь меньшее значение для вас или других разработчиков в конечном итоге и может разорвать некоторые функции в Rails. Пример: в вашем коде '@ photo.gallery' вернет список галерей. '@ photo.galleries' будет иметь больше смысла, не так ли? – Jesper