LoginSignup
0
0

More than 3 years have passed since last update.

MVCに立ち戻って解決

Posted at

解決にこれほど時間を費やしたことはなかった。
だか自分がいかに勉強不足かわかった。

twitter風のアプリでコメント機能を実装中だった。

(1)最初のエラーメッセージはこのメッセージでした

20210327-085100.png

(2)投稿したメッセージに対してのコメントなので
必ず投稿内容があり、そのコメントであった。
ここからアソシエーションは必須。
ルーティングについてもネストを行っていました。

routes.rb

  resources :prototypes do
    resources :comments,   only: :create
  end

comment.rb

class Comment < ApplicationRecord
  belongs_to :prototype
  belongs_to :user

コメント受けるviewファイルについても
terataliさんでネストとビューファイルで検索をすると
>タイトル
『ネストさせたコントローラのビューのパスが通らないです』
のページにて

「フォームに渡すモデルオブジェクトは 

<%= form_for([@product, @characteristic])  do |f| %> 

のように配列で渡すことでできます」

とありました。

そこで

show.html.erb

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

と修正しました。

これで
ルーティング:ネスト
ビューファイル:配列でコントローラにひきわたす準備
できたと思いましたが、またまた同じエラーのまま(ここまでで11時間(汗))

最終的にはできました。

20210327-085606.png

解決のまとめ

まずroutesの実装で
1。config-rbにて →→→→→→→→prototype(tweetページ)とcommentのネスト
2。view show.html.erbにて→[@prototype, @comment]でコメントの受け取り

抜けているものは?

MVCの[C]です。

prototypes_controller.rb

  def show
    @prototype = Prototype.find(params[:id])
  end

show.html.rbには
@prototype’と’@comment’を用意して

そこから受け取る側のprototypes_contoroller
には@prototypeしか用意してなかった。

@commentの受けわす先がなかったために「route error」
なのです

1。受けて 「viewファイル」 

2。ルーティング 「config-route.rb」

3。ここにも同じく仲介者 「viewに対応するcontroller」

それぞれ対応するprototype comment を2つ用意

初心者ありがちです

0
0
0

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