2016-10-26 1 views
0

Я планирую использовать однонамерное наследование с использованием драгоценного камня Paperclip, который будет динамическим в зависимости от типа содержимого.Динамические параметры для Paperclip на основе типа содержимого

class Document < ActiveRecord::Base 
    has_attached_file :file, photo_options #if content type is an image 
    has_attached_file :file, pdf_options #if content type is a pdf file 
end 

class Photo < Document 
    # photo specific code 
end 

class Pdf < Document 
    # pdf specific code 
end 

Можно ли иметь has_attached_file быть динамическим на основе типа контента? Один случай использования будет для при попытке создать новый экземпляр Document от загрузки файла формы:

@document = Document.new params[:document] 

Я надеюсь, что мой вопрос имеет смысл. Благодарю.

+0

Если вы используете модель STI, почему бы вам экземпляр суперкласса с поведением подкласса? Не можете ли вы подумать об этом как о файле как о суперклассе и документе, фотографии и Pdf как о подклассах? –

+0

Я использую '= simple_form_for Document.new' при создании формы. Я пытаюсь думать о File (я просто называю его Document) как суперкласс с Photo и Pdf как подклассы. Вы предполагаете, что на основе параметров [: document] я должен создавать экземпляр соответствующего подкласса? –

ответ

1

Вы можете сделать это нравится:

class Document < ActiveRecord::Base 
end 

class Photo < Document 
    has_attached_file :file, photo_options #if content type is an image 
    # photo specific code 
end 

class Pdf < Document 
    has_attached_file :file, pdf_options #if content type is a pdf file 
    # pdf specific code 
end 

class DocumentsController < ApplicationController 
    #Assuming is the new method. 
    def new 
    @document = params[:document_type].classify.safe_constantize.new 
    end 
end 

И использовать @document в вашей форме.

+0

Спасибо. Прекрасно работает! :) –

Смежные вопросы