【问题标题】:photo upload limit on carrier wave undefined method for user载波上的照片上传限制未定义的用户方法
【发布时间】:2013-03-19 13:25:40
【问题描述】:

我正在使用 CarrierWave 作为我的相册,并且我正在尝试进行设置,以防止用户最多只能将 5 张照片上传到他们的画廊。但是,当单击页面标题为“PhotosController#create 中的 NoMethodError”的“上传照片”按钮时,我收到了“未定义的方法‘用户’”错误

照片.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

我以为我之前已经定义了用户,除非它必须为每个控制器完成?

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:

    您将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 并获得图片的所有者。

    【讨论】:

    • 也一样。不过我明白你在说什么。我认为我首先需要做的是创建一种方式,以便相册属于用户 A 等。现在我可以去 /galleries 并查看它们。我认为任何创建的画廊都不属于任何特定的用户 atm。然后,一旦设置完成,我应该能够更好地定义用户可以上传和使用您的方法的照片数量的限制。至少我是 Rails 新手,我是这么认为的。
    • 是的,如果您希望画廊属于某个用户,您应该明确此关联。这可以像您所做的那样完成,因为图片属于图库。但是,如果您希望用户只有一个画廊,那么关系应该是 has_one 而不是 has_many。
    • 感谢您的帮助
    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2017-02-02
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多