用户的载波未定义方法的照片上传限制

时间:2013-03-19 13:25:40

标签: ruby-on-rails carrierwave

我使用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

我以为我以前有用户定义,除非必须为每个控制器完成?

1 个答案:

答案 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并获取照片的所有者。