Динамический магазин Dir с CarrierWave - PullRequest
3 голосов
/ 08 января 2012

Только для Rails, но я начал использовать CarrierWave для обработки загрузки.Я пытаюсь создать приложение для хостинга, в котором:

  • Шоу принадлежит пользователю
  • Шоу имеет много эпизодов
  • Эпизод принадлежит видео

В настоящее время я использую наследование одной таблицы для хранения моего видеоконтента в таблице активов типа метаданных, все хорошо сохраняется.Проблема, к которой я пытаюсь добраться, заключается в том, что когда я сохраняю видео через CarrierWave, я хочу получить возможность показывать как слаг-шоу, так и слаг эпизода в путь сохранения.

В настоящее время у меня настроено этомои передачи и загрузки эпизодов:

def store_dir
  "shows/#{model.friendly_id}/cover/"
end

А ранее, до STI, я просто сохранял имя файла в видеополе в таблице эпизодов и сохранял его через:

def store_dir
  "shows/#{model.show.slug}/episodes/#{model.id} - #{model.friendly_id}"
end

Только проблематеперь я не могу получить информацию об эпизоде ​​из моей модели видео в загрузчике CW.

Мои модели:

Show.rb

class Show < ActiveRecord::Base

  #Associations
  belongs_to :user
  belongs_to :category
  has_many :episodes

  #Slugs
  extend FriendlyId
  friendly_id :title, use: :slugged

  #Carrierwave
  mount_uploader :image, ShowImageUploader

end

Episode.rb

class Episode < ActiveRecord::Base

  belongs_to :show
  belongs_to :image, :class_name => "Episode::Image"
  belongs_to :audio, :class_name => "Episode::Audio"
  belongs_to :video, :class_name => "Episode::Video"

  accepts_nested_attributes_for :video, :image, :audio

  before_save :add_guid, :on => :create

  #Slugs
  extend FriendlyId
  friendly_id :title, use: :slugged

  validates :title, :presence => true, :length => {:within => 5..40}

  protected

  def add_guid
    self.guid = UUIDTools::UUID.random_create.to_s
  end

end

episode / video.rb

class Episode::Video < Asset

  mount_uploader :video, EpisodeVideoUploader, :mount_on => :filename

end

asset.rb

class Asset < ActiveRecord::Base

end

Так что я думаю, как я могу получить соответствующие данные после загрузки в:

"shows/#{model.show.slug}/episodes/#{model.id} - #{model.friendly_id}"

Спасибо!

...