我使用CarrierWave作为我的相册,我正在尝试设置,因此我可以阻止用户只能将最多5张照片上传到他们的图库。但是当我点击上传照片按钮时,我收到了一个“未定义的方法`用户'”错误,页面标题为“PhotosController中的NoMethodError #create”
Photo.rb:
class Photo < ActiveRecord::Base
attr_accessible :title, :body, :gallery_id, :name, :image, :remote_image_url
belongs_to :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.user.photos(:reload).count >= LIMIT
errors.add(:base, :exceeded_quota)
end
end
end
Photos_controller:
class 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
我以为我以前有用户定义,除非必须为每个控制器完成?
答案 0 :(得分:2)
您正在self.user
模型中调用Photo
。在这种情况下,关键字self
代表photo
的实例。根据您的定义,photo
属于gallery
,因此,无法从照片中调用user
。
如果gallery
属于某个用户,则您应该可以致电self.gallery.user
选择该照片的用户所有者。
您还可以定义has_many :through
关联,以便您可以直接从该照片中调用该用户,或者从该用户中检索所有照片。
这可以在documentation之后完成。在你的情况下:
class User < ActiveRecord::Base
has_many :galeries
has_many :photos, :through => :galeries
end
class Photo < ActiveRecord::Base
belongs_to :user, :through => :gallery
belongs_to :gallery
end
class Gallery < ActiveRecord::Base
belongs_to :user
has_many :photos
end
然后,您应该可以致电photo.user
并获取照片的所有者。