ある投稿に対するコメントの構造
課題で分かったこと
例えば、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の感じに慣れていきたい