no method errorが出たとき
結論
ファイルの命名規則に沿って、記述がしてなかったため。
経緯
rspecを用いてコントローラのテストを実施しようとした。
bundle exec rspec spec/controller/messages_controller.rb
をターミナルで実施すると
また、スペルミスかー
おや、間違ってないぞ。
そのほかのコードに記述漏れやミスがないか確認。
半角と全角の確認。
それでも解決できなかった。
https://qiita.com/ryotakazawa/items/d03226a8dc136ebf15af
https://qiita.com/okuramasafumi/items/af427c90973486f3c7f7
https://matt-note.hatenadiary.jp/entry/2018/10/20/203736
これらの記事を参考に、記述を修正したりしたものの解決できなかった。
よく見たら、ビジュアルコード でのフォルダの
spec/controller/message_scontroller_spec.rb
担っているではないか。
なので、controllersに変更。
その後bundle exec ~~
無事解決しました。
no method errorが出たとき
結論
ファイルの命名規則に沿って、記述がしてなかったため。
経緯
rspecを用いてコントローラのテストを実施しようとした。
bundle exec rspec spec/controller/messages_controller.rb
をターミナルで実施すると
また、スペルミスかー
おや、間違ってないぞ。
そのほかのコードに記述漏れやミスがないか確認。
半角と全角の確認。
それでも解決できなかった。
https://qiita.com/ryotakazawa/items/d03226a8dc136ebf15af
https://qiita.com/okuramasafumi/items/af427c90973486f3c7f7
https://matt-note.hatenadiary.jp/entry/2018/10/20/203736
これらの記事を参考に、記述を修正したりしたものの解決できなかった。
よく見たら、ビジュアルコード でのフォルダの
spec/controller/message_scontroller_spec.rb
担っているではないか。
なので、controllersに変更。
その後bundle exec ~~
無事解決しました。
expected ["を入力してください"] to include "must exist"について
結論
"must exist"を"入力してください"に変更してねという意味
経緯
まずなぜこのエラーが出たのかというと、
と入力していたから。
実は、テストコードを入力する前に、jayamlをインストールしていたことで
include(エラーを返す言葉)を日本語表記にしないといけなかった。
なので、
にすれば解決することができる。
discribe/context/it/expectについて
テストはだいたい型が決まっているので、何を書けば良いのかを確認できるように忘備録として残しておきます。
- describeは何をテストするのか
- contextはどのような条件でテストをするのか
- itは何をアウトプットするのかを記述する。
- expectはこうなってほしいなぁという期待を意味する
ビューが思い通りに表示されない
グループ編集機能を実装後、動作確認のため、
変更ボタンを押したら、違うビューファイルに飛んでしまった。
理由
=link_toで飛ばす場所を間違えてしまっていた。
本来は
とするべきところを
と記述してしまった。
確認方法
rake routesをしてルーティングを確認する。
edit_user GET /users/:id/edit(.:format) users#edit
user PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
group_messages GET /groups/:group_id/messages(.:format) messages#index
POST /groups/:group_id/messages(.:format) messages#create
groups POST /groups(.:format) groups#create
new_group GET /groups/new(.:format) groups#new
edit_group GET /groups/:id/edit(.:format) groups#edit
rake routes について
rake routesをすると
root GET / groups#index
users GET /users(.:format) users#index
POST /users(.:format) users#create
edit_user GET /users/:id/edit(.:format) users#edit
(一部抜粋)
となるが、一番上のroot GET / groups#index
の「/」は「root」という意味になる。
今回はresoucesを使用してrakeroutesをしているので、prefixが適用されるので必ず「_path」をつけなければいけない。
したがって一番上の場合はroot_pathとなる。
2番目はusers_root_pathになる。
Couldn't find Group with 'id'= の解決方法
メッセージ送信機能を実装中に発生。
結論
routes.rbで入れ子構造にしていなかったから。
経緯
Couldn't find Group with 'id'=
の意味は、グループI'dが持ってこれないよと言っている。
ということは、
- データベースに「group_id」の記述がない
- コントローラに問題がある。
のどちらかに絞られると考えました。
データベースには記述はあったので、データベースに「group_id」が存在することがわかった。
コントローラに記述ミスがないか確認し、あまり関係のないところではあるがミスがあったのでそこを修正し、再度リロードしたが結果は変わらない。
なので、
byebug pryをしてコントローラの動きを止めて、もう一度確認すると、
group_idの値がnilになっていた。
そしてrake routesをターミナル上でかけてみると、
そもそもgroup_idに関する記述がないことがわかった。
これにより、ルーティングがおかしいことに気づく。
ルーティングを見てみると、今回の場合、
messagesの中にgroupがあるため、入れ子構造にしないといけないのだが
doとendが抜けているではないか!
したがって
にしてあげれば解決でき流ということです。