プログラミング備忘録【Ruby on Rails】

初学者として日々学んだことや発見をいつでも引き出せるようブログにまとめてみた。初学者のため間違った説明があった場合、コメントいただけると嬉しいです。

画像の扱う場合のあれこれ!編集中!!!!!!!!!!

「7.画像のアップロード」

⑴画像を保存するためのimage:textカラムを追加

brew install imagemagick

⑵gemfileにcarrierwaveとmini_magickを追加

アップローダーを作成
rails g uploader classname

⑷imageカラムのあるモデルに以下を追記(imageカラムとUploaderを紐づける)
mount_uploader :image, Classname

⑸viewの設定
・画像をアップロードするにはform.file_field :image、画像を表示するにはimage_tag 画像パスを設置する(画像パスはインスタンス変数.image.urlを指定する必要がある)

*コントローラのparamsにimage_cacheカラムを追加することで、ファイル構造を含むデータをキャッシュすることができる→form.hidden_fieldと併用することで確認画面などの実装が可能になる(以下、確認画面の設定例)
*herokuでは時間が経過すると、アップロードした画像が消える

「app/views/feeds/_form.html.erb」<%= form_with(model: feed, local: true, url:confirm_feeds_path) do |form| %>


<%= form.label :image %>

<%= image_tag(@feed.image.url) if @feed.image && @feed.image.url %>
<%= form.file_field :image %>
<%= form.hidden_field :image_cache %>


<%= form.submit %>
<% end %>

「app/views/feeds/confirm.html.erb」

確認画面

<%= form_with(model: @feed, url: feeds_path, local: true) do |form| %>

<%= image_tag(@feed.image.url) if @feed.image && @feed.image.url %>
<%= form.hidden_field :image_cache %>
<%= form.submit "投稿する" %><% end %><%= form_with(model:@feed, url:new_feed_path, local:true, method:"get") do |form| %>
<%= form.hidden_field :image_cache %>
<%= form.submit "戻る", name: "back" %><% end %>

「app/controllers/feeds_controller.rb」
# そのほかのアクションは前と変わりがないので省略しています
def new
if params[:back]
@feed = Feed.new(feed_params)
else
@feed = Feed.new
end
end

def confirm
@feed = Feed.new(feed_params)
end

private

def set_feed
@feed = Feed.find(params[:id])
end

def feed_params
params.require(:feed).permit(:image, :image_cache)
end

「config/routes.rb」
Rails.application.routes.draw do
resources :feeds do
collection do
post :confirm
end
end
end