Web アプリケーションを構築する場合、必ず必要になる機能の 1 つは画像のアップロード機能です。実際、画像のアップロードは、現代のアプリケーションなしでは考えられない重要な機能の 1 つです。それだけではなく、画像のアップロードが検索エンジンの最適化にも役割を果たしているという事実を考慮すると、さらに重要になります。 CarrierWave gem は Rails アプリケーションと統合でき、ファイルをアップロードするためのシンプルかつ非常に柔軟な方法を提供します。
Rails アプリケーションのセットアップ:
Rails アプリケーションでこれを設定するには、新しいプロジェクトを作成した後、gem ファイルに 2 つの gem を追加する必要があります。 1 つ目は CarrierWave 自体で、2 つ目は bootstrap-sass gem (オプション) です。gem 'carrierwave'、'~> 0.9'
gem 'bootstrap-sass'、'~> 2.3.2'
インストール:
Bundle install を実行して、アプリケーションのモデルとコントローラーを作成します。バンドルインストールRails g model モデル名フィールド:データ型 =>添付ファイル:文字列
rake db:移行
Rails g controlcontrollername action => Index new create destroy 次に、アップローダーを作成する必要があります。アップローダーは、ファイルがアップロードされた後のファイルの処理方法を Carrierwave に指示します => Rails g Uploader Attachment ファイルattachment_uploader.rbを含むuploadersという名前のフォルダーがアプリフォルダー内に作成されます。
遊び方:
app/uploaders/attachment_uploader.rbclass Attachment Uploader < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end end
次に、履歴書コントローラーにフォーム処理を処理するコードを追加します。
class ResumesController < ApplicationController defindex @resumes = Resume.all end def new @resume = Resume.new end def create @resume = Resume.new(resume_params) if @resume.save redirect_toresumes_path、注意: "再開 #{@resume .name} がアップロードされました。」 else render "new" end end def destroy @resume = Resume.find(params[:id]) @resume.destroy redirect_to raises_path、注意: 「履歴書 #{@resume.name} が削除されました。」 end private defresume_params params.require(:resume).permit(:name, :attachment) end end
次に、ビュー ファイルを設定する必要があります。
new.html.erbの場合
<%= form_for @resume, html: { multipart: true } do |f| %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :attachment %> <%= f.file_field :attachment %> <%= f.submit 「保存」 "、クラス: "btn btn-primary" %> <% 終了 %>
Index.html.erb の場合
<% @resumes.each は |resume| を行います%> <% 終了 %>
名前 | ダウンロードリンク | |
---|---|---|
<%= 再開.name %> | <%= link_to「ダウンロード履歴書」、resume.attachment_url %> | <%= button_to "削除"、再開、メソッド: :delete、クラス: ""、確認: 「#{resume.name} を削除してもよろしいですか?」 %> |
app/uploaders/attachment_uploader.rb
class AttachmentUploader < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def extension_white_list %w(pdf doc htm html docx) 終了終了
参考文献:
ギットハブ: https://github.com/carrierwaveuploader/carrierwave ルビージェム: https://rubygems.org/gems/carrierwave/versions/0.11.2 レールキャスト: http://railscasts.com/episodes/253-carrierwave-file-uploads最新のアップデートを購読する
関連記事