Rails Diary

プログラミングの学習記録です。

ある投稿に対するコメントの構造

課題で分かったこと

例えば、posts/show.html.erbのビュー画面で利用する変数についてはpostsコントローラのshowアクションで作成する。
commentsの一覧だからcommentsのコントローラのindexアクションにしなければいけないと思い込んでいた。あくまでもpostsに対するcommentsであり、postsのshowビューで表示されるcommentsの一覧なので、showアクションに@comments = Comment.allと取得しておく。

投稿のコントローラ内

def show
  @post = Post.find(params[:id])
  @comment = Comment.new
  @comments = @post.comments.includes(:user).order(created_at: :desc)
end

form_withに渡す引数について

想定

post(親),comment(子)という形でルーティングをネストしている。

投稿へのコメント作成のフォーム画面作成

<%= form_with model: comment, url: [post, comment], local: true do |f| %>

あんまり良くない書き方例として以下があった。

<%= form_with modle: comment, url: post_comment_path(post, comment), local: trure do |f| %>

おそらく簡潔でないという意味であまり良くないのだと思われる。意味としては同じと仮定すると、post_comment_path(post, comment)はURLヘルパーメソッドにpostとcommentの情報を渡すことでそれぞれのIDを参考にURLを生成してくれる。

※変数はパーシャルの呼び出し時に指定しているものとする

パーシャルにローカル変数を使った方が良い理由

インスタンス変数より、ローカル変数を使うことでControllerとの依存度を薄くしている。これにより他のViewファイルから呼び出す際に扱い易くなる。

インスタンス変数を使った場合は、それを使っているテンプレートを呼び出すControllerで対応するインスタンス変数を作成させておく必要も出てくる【理解できていない箇所メモ】

simple_format 文字列加工

<p><br/>などのタグを自動で付与してくれる

simple_formatに引数としてtextを渡すとタグ付けして返してくれる

<% text = "テキスト" %>
<%= simple_format(text) %>

↓以下の様にタグ付けがされる

<p>テキスト</p>

パーシャル

再利用性のあるものに対してはこれを使うという認識。パーシャル内で使う変数はrenderに一緒に記載する。renderで記載する変数はそのページを呼び出すコントローラアクションに記載されている必要がある。

思ったこと

  • Railsで何がどう自動類推されるのか理解が甘いので、どういう仕組みか分からずに実装できない。
  • 全体像をふかんして見ることができていないので、ここでパーシャルを組み込むという発想に至れない。
  • 全部慣れなんだとは思う。課題ごとに腑に落ちない箇所を調べてRailsの感じに慣れていきたい

参考にしたサイト

simple_format

simple_formatの使い方 - Qiita

simple_format | Railsドキュメント

Rails simple_formatの勝手につく<p>タグを削除したい - ECのウェブ担当者のメモ