Top > 開発ガイド > コンポーネント開発Tips集 > 添付ファイル

添付ファイル

対象バージョン

当ドキュメントはRubricks-0.6.x向けです。

概要

Rubricksでは添付ファイルをアップロードする機能を提供しています。

実装の手順

Model

  • acts_as_attachable
    • 引数1:options(Hash)
      :dependent    => :destroy or nil
                       該当モデルのdestroy時にアップロードしたファイルも削除するかどうか
      :save_options => Hash
                       attachment_with(後述)実行時に参照されるデフォルトのオプション
      
  • サンプル
    class News::NewsItem < ActiveRecord::Base
      acts_as_attachable({
        :dependent      => :destroy,
        :save_options   => {
          :content_type => :anything,
          :storage_type => :database,
        }
      })
    end
    
  • 追加されるメソッド
    • has_many :rubricks_attachments, :through => :rubricks_attachment_links
    • attachment_with
      添付ファイルを保存するためのメソッドです。
      • 引数1:attachments(Array)
        <%= file_field_tag %>等でアップロードされた添付ファイルを指定します。複数ある場合はArrayに格納した上で指定して下さい。
        
      • 引数2:options(Hash)
        :content_type   => :anything or :image
                           添付ファイルの種類を指定します。
                           :imageを指定すると画像ファイル(gif/jpg/png)のみが許可されます。
                           省略した場合、:anythingとなります。
        :function_id    => Integer
        :function_name  => String
                           添付ファイルにアクセスするために必要な権限を指定します。
                           この機能は後述の添付ファイル保存先を:databaseとした場合にのみ有効となります。
                           RubricksFunctionのID(数値)もしくは該当コンポーネントのFunctionName('access'や'admin'等)で指定します。
                           省略した場合、該当コンポーネントの'access'権限となります。
        :name           => String
                           添付ファイルを保存する際のファイル名を指定します。
                           省略した場合、添付ファイルの元ファイル名が使用されます。
        :storage_type   => :filesystem or :database
                           添付ファイルの保存先を指定します。
                           :filesystemを指定すると該当コンポーネントの公開ファイルディレクトリに保存されます。
                           :databaseを指定するとデータベース上に保存されます。
                           省略した場合、:filesystemとなります。
                           ファイルシステムを指定した場合には静的ファイルとして保存されるため、パフォーマンス的に優位となります。
                           データベースを指定した場合はパフォーマンスには劣りますが、アクセス制御が行えるメリットがあります。
        
      • サンプル
        class News::IndexController < ApplicationController
          def create
            ni = News::NewsItem.create(params[:news_item])
            ni.attachment_with(
              params[:attachment],
              {
                :content_type   => :anything,
                :function_name  => 'access',
                :storage_type   => :database,
              }
            )
          end
        end
        

Controller

  • find
    • サンプル
      @ni = News::NewsItem.find(params[id], :include => :rubricks_attachments)
      

View

  • render_attachment
    • 引数1:ra(RubricksAttachmentオブジェクト)
    • 引数2:options(Hash)
      :type   => :file or :image
                 添付ファイルを表示する形式を指定します。
                 :fileを指定すると添付ファイルへのリンクを出力します。
                 :imageを指定すると画像を直接出力します。
                 省略した場合、添付ファイルの形式を自動判別して画像ファイルの場合は:image、その他の場合は:fileとして処理します。
      :text   => 添付ファイルアイコンの横に表示される文字列を指定します。(:fileの場合にのみ有効)
      その他image_tagやlink_toで利用できるHTMLのオプション(:alt, :class, :id, :size, :title 等)
      
    • サンプル
      <% @ni.rubricks_attachments.each do |ra| %>
        <%= render_attachment(ra, {:type => :file, :id => "news_item_attachment_#{ra.id}"}) %>
      <% end %>