0

有人可以就 CarriveWave 的 store_dir 提供帮助吗?

一个人如何拥有多个图像模型来存储基于关联的belong_to模型的永久链接的文件?

# Garage model
class Garage < ActiveRecord:Base

  attr_accessible: :avatar, :permalink, :car_image_attributes,
                   :motorcycle_image_attributes

  has_many :car_image
  has_many :motorcycle_image

  mount_uploader :avatar, AvatarUploader

  def set_permalink
    self.permalink = permalink.parameterize
  end

  def to_param
    permalink.parameterize
  end

end

这就是我与 CarrierWave 链接的图像模型

# Car Image model
CarImage < ActiveRecord:Base
  belongs_to :garage
  attr_accessible: :garage_id, :image

  mount_uploader :car_image, CarUploader

end

# Motocycle Image model
MotocycleImage < ActiveRecord:Base
  belongs_to :garage
  attr_accessible: :garage_id, :image

  mount_uploader :motorcycle_image, MotocycleUploader

end

这就是我的 CarrierWave 上传器的样子。

# CarrierWave avatar uploader
avatar_uploader.rb
  # This uploader directly relates to the Garage model table 
  # column avatar:string.

  def store_dir
    # This works for the avatar because it calls on the Garage permalink
    # but it fails for the other image models because it's a model relation
    # has_many, belongs_to and the model.permalink will be based on the
    # uploader's respective model and not the Garage model
    # eg. car_uploader.rb = model.permalink = CarImage.permalink
    # I would like it to refer to to Garage.permalink at all times.
    "garage/#{model.permalink}/#{mounted_as}/"
  end
end

# CarrierWave car and motorcycle uploaders
car_uploader.rb
# Fails to upload because it doesn't know what permalink is
end

motorcycle_uploader.rb
# Fails to upload because it doesn't know what permalink is
end

抱歉,如果我想这么清楚,但非常感谢您提供的任何见解。

4

1 回答 1

2

可能最简单的方法是将永久链接委托给模型上的父级

CarImage < ActiveRecord:Base
  belongs_to :garage
  delegate : permalink, :to => :garage
  attr_accessible: :garage_id, :image

  mount_uploader :car_image, CarUploader



end
于 2012-10-10T17:12:58.123 回答