バグ修正メモ
System Versions
以下のエラーを修正していく。
blog一覧ページにアクセスした場合 blogの一覧ページが表示されること
ルーティングが間違っていた。
blogではblogsコントローラのindexアクションを呼び出せないのでエラーになっている
一覧画面を表示させるルーティングを追加
Rails.application.routes.draw do root to: 'blogs#index' resources :blogs do resources :comments, only: [:create, :destroy] end end
blog→blogsへ変更することで blog#index→blogs#indexになるのでindexが呼び出せる。
新規作成ページにアクセスした場合 blogの新規作成ページが正しく表示されていること
これはすぐに分かった。missing templateなので
_new.html.erb
→new.html.erb
フォルダ名が違った。
Blogs blog新規作成ページにアクセスした場合 blogの新規作成ができること
これはbinding.irb
で処理を確認した。
19: def create 20: @blog = Blog.new(blog_params) => 21: binding.irb 22: if @blog.save 23: redirect_to @blog, notice: 'Blog was successfully created.' 24: else 25: render :new 26: end #入力内容がサーバーへ送られてるか確認 irb(#<BlogsController:0x00007fd818aa88e8>):001:0> params => <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"o7JUcI/7WunHKid9VYaN74qxOioy57jTpGlH954E5kUnM4IQS/8C1gf9YaEHO4WJ54EOO4StgWLdyZb2d/gBeA==", "blog"=><ActionController::Parameters {"title"=>"ssssss", "content"=>"ssssssss"} permitted: false>, "commit"=>"Create Blog", "controller"=>"blogs", "action"=>"create"} permitted: false> #@blogが作れてるか確認するとcontentがnilになってる irb(#<BlogsController:0x00007fd818aa88e8>):002:0> @blog => #<Blog id: nil, title: "ssssss", content: nil, created_at: nil, updated_at: nil> irb(#<BlogsController:0x00007fd818aa88e8>):003:0> @blog = Blog.new(blog_params) Unpermitted parameter: :content => #<Blog id: nil, title: "ssssss", content: nil, created_at: nil, updated_at: nil>
Unpermitted parameter: :contentからストロングパラメータにcontentが抜けていることがわかる
blog一覧から詳細ページにアクセスした場合 blogの詳細ページが表示されること
Did you mean? で言われてるように
comments→commentと直せばいいが,アソシエーションをかえたほうがいい
has_many :comment→has_many :commentsと直せばcommentsというメソッドが使えるようになる。
blog詳細ページで編集画面へのリンクをクリックした場合 blogの編集ページが表示されること
<%= link_to 'Edit', '/blogs/#{blog.id}/edit' %>
“”
が’’
になっていた。blog →@blogへ変更。
blog編集ページにアクセスした場合 blogの編集用フォームが表示されること
<% render 'form', blog: @blog %>
のイコールがぬけていたのでレンダーされていなかった。
@blogをローカル変数blogへ渡しフォームへ渡している
blog編集ページにアクセスした場合 内容を編集できる
編集ページにアクセスしたらブログの投稿フォームが表示されてしまう
サーバーログを確認するとcreateアクションが実行されている
_form.html.erb
をみてみるとform_with (model: Brog.new, local: true) do |f|
となっていて
引数に新規作成newを渡していることが原因でcreateアクションが実行されている。
blog: @blog
で定義したローカル変数blogにかえる。
blog新規作成ページにアクセスした場合 blogの新規作成でcontentも正しく作成できること
blogを新規作成した時にcontentだけ0になる。
データベースのテーブルの定義を確認すればいい。
マイグレーションファイルのcontentがinteger型で定義されていたので文字列を入れても0になっていた
rails db:rollbackで1つずつもどしてrails db:migrateすればおk
blog詳細ページでコメントした場合 blogの詳細ページにコメントが表示されること
@blog.comments.count.to_i
でintegerとして認識されてしまっている。
文字列として表示させたいのでto_s
にする。