前のレッスンでオピニオン(Opinion)の基礎は作成できましたので、これからは本格的な実装に入ります。
新規作成の為のコードを、clips_controllerのshowに追加します。今回はオピニオンを作成するのはクリップのshow画面になりますので、そちらに新規オブジェクトを作成します。
# clips_controller.rb
def show
@opinion = Opinion.new
end
次に、新規作成の為のフォームを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というメソッドですが、ハッシュを結合させることができるメソッドです。
例えば
> 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 [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。