はじめに
Ruby on Railsでwebアプリを作成している最中にしょーもないことでハマったのでメモしておきます。
ちょー初心者向けなのでご了承ください。
状況
webアプリ内のあるページにアクセスして見るとDBから取得したレコードを表示するはずのところが、まっさらなページが表示されていました。
そこでサーバのログを見てみると
Started GET "/datings/32" for 119.106.25.164 at 2019-01-08 12:28:23 +0000
(0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
↳ /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/gems/2.4.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/quiet_assets.rb:13
Processing by DatingsController#show as HTML
Parameters: {"id"=>"32"}
Dating Load (0.2ms) SELECT "datings".* FROM "datings" WHERE "datings"."id" = ? LIMIT ? [["id", 32], ["LIMIT", 1]]
↳ app/controllers/datings_controller.rb:81
Rendering datings/show.html.erb within layouts/application
Spot Load (0.2ms) SELECT "spots".* FROM "spots" INNER JOIN "dating_spots" ON "spots"."id" = "dating_spots"."spot_id" WHERE "dating_spots"."dating_id" = ? [["dating_id", 32]]
↳ app/views/datings/show.html.erb:36
Rendered datings/show.html.erb within layouts/application (22.2ms)
Rendered layouts/_header.html.erb (0.7ms)
Rendered layouts/_footer.html.erb (0.3ms)
Completed 200 OK in 367ms (Views: 326.1ms | ActiveRecord: 1.8ms)
Started GET "/datings/class=%22date-detail-pic%22" for 119.106.25.164 at 2019-01-08 12:28:24 +0000
Processing by DatingsController#show as HTML
Parameters: {"id"=>"class=\"date-detail-pic\""}
Dating Load (0.1ms) SELECT "datings".* FROM "datings" WHERE "datings"."id" = ? LIMIT ? [["id", 0], ["LIMIT", 1]]
↳ app/controllers/datings_controller.rb:81
Completed 404 Not Found in 2ms (ActiveRecord: 0.1ms)
Started GETが2回??
なぜかコントローラのshowメソッドが2回呼ばれているようでした。。。
なおかつ2回目のGETではなぜか"/datings/class=%22date-detail-pic%22"にアクセスしていました。
解決までの道のり
binding.pryで取得されているレコードを確認したり、chromeで検証から生成されたhtmlを見たり、showメソッドにlogger.debugを入れたりと色々試しました。
logger.debugでshowメソッド呼び出し回数を確認したところ、実はshowメソッドが2回呼ばれていない。。コントローラよりviewがおかしいのかなと見返してみると、画面に表示する部分をこのように書いていました。
<% @dating.thmeme %>
#正しくは <%= @dating.thmeme %>
こんな初歩的なことでした。
なぜshowメソッドが2回呼ばれたのかは分かっていませんが、一応解決しました。
もし同じような方がいたら参考にしてもらえればと。