概要
目的
プロゲート以外の方法(strong parameters)で投稿詳細に投稿主(ユーザー)情報を記載すること。
(ちなみにプロゲートはこんな感じ)
実現したいこと
各action | すること(ポイント) |
---|---|
new | from_withを使って、投稿。 |
create | strong parametersを使用して処理。 |
show | 投稿にユーザー情報を引っ張ってくる。 |
このような流れで進めていきます。
完成イメージ

環境
Ruby 2.5.6
Rails 5.2.3
前提
- userのデーブルがあり、「name」カラムがあること。
- 投稿モデルは今回commentモデルであること。
- deviseを導入していること。(current_userを使用している為)
strong parametersとは?
一言でいうと
**「Web画面上から内部へ流れてきた値を安全に受け取る仕組み」**のことです。
もう少し噛み砕いて簡単に説明すると、
入力フォームで記述した情報(名前、メールアドレス等)を安全にバックエンドに渡す仕組みのことです。
今回そのストロングパラメーターを使用します。
参考URL
Rails初学者がつまずきやすい「ストロングパラメータの仕組み」
【Rails入門】params使い方まとめ
new(form_withを使って投稿)
ここでの目的はfrom_withを使って、投稿出来るようにします。
<%= form_with model: @comment, local: true do |form| %>
<%= form.text_area :content,class:"new_text" %>
<% end %>
このようにform_withを使用して、入力された情報をストロングパラメーターで受け取れるようにします。
controller(strong parametersを使用して処理)
def new
@comment = Comment.new
end
def create
@comment = Comment.create params.require(:comment).permit(:content).merge(user_id: current_user.id)
end
def show
@comment = Comment.find(params[:id])
@user = User.find_by(id: @comment.user_id)
end
★解説★
ここでのポイントはcreateアクションの時に、
newで入力された特定の情報(今回はcontent)しか
情報は受け取りませんよ〜!っていう設定をしています。
★ポイント★
(1)ログインしているユーザーIDの読み取り
createアクションを実行した時に入力されたcontent以外にもその時に
ログインしているユーザーIDを受け取る設定しています。
current_userはストロングパラメーターでは適用対象外なので、
mergeメソッドを使用して受け取れるようにしました。
(2)ログインしているユーザーIDの受け取り
showアクションを実行した時に、
createアクションで読み取ったユーザーIDを紐付けています。
参考URL
【Ruby on Rails】ストロングパラメータって何なの?
show(投稿にユーザー情報を引っ張る)
<%= @user.name%> #名前を表示
<%=@comment.content%> #投稿内容を表示
これで投稿にユーザー情報を紐付けることが出来ました!
最後に
まだまだ勉強不足なところがありますので、
アップデートできた知識は追加で記載していきます。
もし、何か修正点とかございましたらコメント等
恐縮ですが、宜しくおねがいします。