オピニオンの実装 1

前のレッスンでオピニオン(Opinion)の基礎は作成できましたので、これからは本格的な実装に入ります。

1.新規オピニオンオブジェクトを作成する

新規作成の為のコードを、clips_controllerのshowに追加します。今回はオピニオンを作成するのはクリップのshow画面になりますので、そちらに新規オブジェクトを作成します。

# clips_controller.rb

def show
  @opinion = Opinion.new
end

2.オピニオンフォームの実装

次に、新規作成の為のフォームをclips/show.html.erbに追加します。ここでも、Bootstrapのcssクラスを使用しています。

# clips/show.html.erb

<h2>オピニオンする</h2>
<%= form_for [@clip, @opinion] do |f| %>
  <%= f.text_field :title, class: 'form-control' %>
  <%= f.text_area :body, class: 'form-control' %>
  <%= f.submit "オピニオン作成", class: 'btn btn-default my-2' %>
<% end %>

そして、createの実装を行います。まず、作成するオピニオンが属するクリップを探しています。保存したら今いるページに戻るように設定しています。

# opinions_controller.rb

def create
  @clip = Clip.find(params[:clip_id])
  @opinion = current_user.opinions.build(opinion_params.merge(clip: @clip))
  @opinion = current_user.opinions.build(opinion_params)
  @opinion.clip = @clip
  @opinion.save

  # リダイレクトをclips#showに変更
  redirect_to @clip
end

ハッシュの結合 merge

ここで登場するmergeというメソッドですが、ハッシュを結合させることができるメソッドです。

例えば

> hash = {Name1: "yoshida"}
 => {:Name1=>"yoshida"} 
> hash2 = {Name2: "tadokoro"}
 => {:Name2=>"tadokoro"} 

という2つのハッシュがあるとします。これをmergeというメソッドを使うと

> h = hash.merge(hash2)
 => {:Name1=>"yoshida", :Name2=>"tadokoro"} 
 > h
 => {:Name1=>"yoshida", :Name2=>"tadokoro"} 

というように結合することができるのです。

無料ビデオ講座のお知らせ

Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る

×