2016-10-26 16 views
0

コンテンツタイプに基づいて動的になるPaperclip gemを使用して単一テーブル継承を使用する予定です。コンテンツタイプに基づく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のスーパークラスとしてサブクラスとして考えようとしています。 params [: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

ありがとうございます。美しく動作します! :) –

関連する問題