バグ修正メモ

System Versions

  • Ruby version
2.6.3

  • Rails version
5.2.3

以下のエラーを修正していく。

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.erbnew.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にする。