LoginSignup
1
1

More than 3 years have passed since last update.

[strong parameters][form_with]投稿にユーザー情報を表示する

Last updated at Posted at 2020-01-26

概要

目的

プロゲート以外の方法(strong parameters)で投稿詳細に投稿主(ユーザー)情報を記載すること。
(ちなみにプロゲートはこんな感じ

実現したいこと

各action すること(ポイント)
new from_withを使って、投稿。
create strong parametersを使用して処理。
show 投稿にユーザー情報を引っ張ってくる。

このような流れで進めていきます。

完成イメージ

スクリーンショット 2020-01-25 15.47.36.png
画像ではユーザー名、アイコン記載しておりますが、
今回は分かりやすく理解してもらうためにユーザー名だけの表示します。

環境

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を使って、投稿出来るようにします。

comments/new.html.erb
<%= form_with model: @comment, local: true  do |form| %>
 <%= form.text_area :content,class:"new_text" %>
<% end %>

このようにform_withを使用して、入力された情報をストロングパラメーターで受け取れるようにします。

controller(strong parametersを使用して処理)

app/controllers/comments_controller.rb
    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(投稿にユーザー情報を引っ張る)

app/views/comments/show.html.erb
<%= @user.name%> #名前を表示
<%=@comment.content%> #投稿内容を表示

これで投稿にユーザー情報を紐付けることが出来ました!

最後に

まだまだ勉強不足なところがありますので、
アップデートできた知識は追加で記載していきます。

もし、何か修正点とかございましたらコメント等
恐縮ですが、宜しくおねがいします。

1
1
1

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
1
1