LoginSignup
5
6

More than 5 years have passed since last update.

画像投稿を可能にするgem carrierwave

Last updated at Posted at 2017-10-15

gem 'carrierwave'

ruby on railsでは、トップページにコンテンツを投稿する機能があります。その際に文字だけでなく画像も投稿できるようにするgemがあります。それが carrierwaveです。

ー完成予想図ー

トップページに画像を投稿できるようにします。

〜完成予想図ートップページ
スクリーンショット-2017-02-01-22.43.38.gif

〜完成予想図ー投稿画面

2f20765252c23641a76f28031434428b_f244100080d705ad91f18193adaf33e0 (1).gif

投稿画面の「ファイルを選択」のボタンから、自分のパソコンにある画像データを選び、投稿できます。

上の場合だと、ワインの画像です。

ープログラミング書き方ー

まず、gemのcarrierwaveをインストールします。

いじるファイル名 Gemfile

gem 'carrierwave'と入力

[ruby] gem 'carrierwave' [/ruby]
ターミナルでbundle installと書き、enterを押します。

いじる場所 ターミナル

bundle installと入力

[ruby] $bundle install [/ruby]
下のようにbundle complete!と出れば成功です。

[ruby] Bundle complete! 29 Gemfile dependencies, 94 gems now installed.

Use 'bundle show [generate]' to see where a bundle_gem is installed. [/ruby]

次に画像の保存形式を指定するためのアップローダーというファイルを作成します。

そのファイルの中で画像の保存形式(jpegやgif等)や画像の大きさの許容範囲を決定できます。

いじる場所 ターミナル

アップローダー作成構文

rails g uploader (任意のファイル名)

ここでは例として、rails g uploader Frontcoverとします。ファイルの最初の文字は大文字にしましょう。

そうすると、create app/uploaders/frontcover_uploader.rbと出て、sublime textの中で、アップローダーファイルが作成されます。このファイルの中で保存形式等をいじることができます。

では次に、テーブルをいじりましょう。テーブルの中に画像を保存するためのカラムを追加しましょう。これがないと画像が保存できません。すでに作ってある場合は追加しなくて大丈夫です。

いじる場所 ターミナル

カラム追加構文

rails g migration add_(任意のカラム名)to(任意のテーブル名)(任意のカラム名):(任意のカラムの型)

では、ターミナルでrails g migration add_frontcover_to_comic frontcover:stringと書いて、enterを押します。

さらに、次の行でrake db:migrateと書いてenterを押します。

[ruby]$rails g migration add_frontcover_to_comic frontcover:string
$rake db:migrate[/ruby]
上の例だとfrontcoverがカラムでcomicがテーブルです。

そのあと、画像データがあるモデルに以下のように追記しましょう。

今回はfrontcoverというカラムはcomicモデルの中にあります。

いじるファイル名 (任意のモデル名).rb

アップローダー追加構文

mount_uploader :(任意のカラム),(任意のカラム名)Uploader

[ruby]mount_uploader: frontcover, FrontcoverUploader[/ruby]
2つ目のカラム名の最初の一文字目は大文字にしましょう。長いカラム名の場合は、上のFrontCoverのように大文字が2つになることもあります。

これで投稿した画像データをテーブルに保存できるようになりました。最後に、画像を投稿する画面と画像をページに出力する画面を作成しましょう。

まずは投稿画面です。

いじるファイル名 new.html.erb

投稿画面はform_forを使います。

[ruby]<%=form_for @comic do |f|%>


<%= f.text_field :title placeholder:"作品タイトル" %>
<%= f.text_field :author placeholder:"著者" %>
<%= f.file_field :front_cover placeholder: "表紙" %>
<%= f.submit "投稿する" %>

<% end %> [/ruby]
上記のように書くと、画像ファイルを選んで投稿という動きができるようになります。

次に、投稿された画像をトップページに表示されるようにしましょう。

基本的にトップページをいじる際は、indexをいじることにになります。

いじるファイル名 index.html.erb

画像表示構文

image_tag (任意のテーブル名).(任意のカラム名).to_s

[ruby]<% @comic.each do |comic| %>


<%= image_tag comic.front_cover.to_s %>
<%= comic.title %>
<%= comic.author %>

<% end %>[/ruby]
このようにすることで保存した画像データをトップページに出力することができます。

上記の例では、画像以外にも、タイトルや著者の名前も出すようにしています。

投稿画面で画像をトップページに投稿できるようになります。

スクリーンショット-2017-02-01-22.43.38.gif

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6