見出し画像

CRUD を作成②

CRUD を作成 の続き。

前回はルーティングを作成したので、今回はコントローラを作成する。
以下のコマンドを実行する。
ルーティングは作成済み、ヘルパーは使用しないのでオプションを追加しコマンドを実行する。

rails g controller books index show new create edit update destroy --no-helper --skip-routes

以下のように出力されていれば成功。私の環境では rspec を使用しているのでテストファイルが rspec となっている。rspec を使っていない場合は minitest のファイルが生成される。
rspec を導入したい場合は こちら を参考にする。

create  app/controllers/books_controller.rb
invoke  erb
create    app/views/books
create    app/views/books/index.html.erb
create    app/views/books/show.html.erb
create    app/views/books/new.html.erb
create    app/views/books/create.html.erb
create    app/views/books/edit.html.erb
create    app/views/books/update.html.erb
create    app/views/books/destroy.html.erb
invoke  rspec
create    spec/requests/books_spec.rb

不要なファイルが作成されているので削除する。

rm app/views/books/create.html.erb app/views/books/update.html.erb app/views/books/destroy.html.erb

ここまでの作業ですでにブラウザ上にページが表示できるようになっている。手動で確認するのは大変なのでテストを追加する。spec/requests/books_spec.rb に以下のコードを追加する。

describe "GET /books" do
  it "returns http success" do
    get "/books"
    expect(response).to have_http_status(:success)
  end
end

describe "GET /books/:id" do
  it "returns http success" do
    get "/books/1"
    expect(response).to have_http_status(:success)
  end
end

describe "GET /books/new" do
  it "returns http success" do
    get "/books/new"
    expect(response).to have_http_status(:success)
  end
end

describe "POST /books" do
  it "returns http no_content" do
    post "/books"
    expect(response).to have_http_status(:no_content)
  end
end

describe "GET /books/:id/edit" do
  it "returns http success" do
    get "/books/1/edit"
    expect(response).to have_http_status(:success)
  end
end

describe "PATCH /books/:id" do
  it "returns http no_content" do
    patch "/books/1"
    expect(response).to have_http_status(:no_content)
  end
end

describe "DELETE /books/:id" do
  it "returns http no_content" do
    delete "/books/1"
    expect(response).to have_http_status(:no_content)
  end
end

rspec を実行してすべてグリーンになれば成功。

bundle e rspec spec/requests/books_spec.rb

すべて成功したので正常に動作することは担保されている。
試しにブラウザにアクセスしてみる。

一覧ページ

詳細ページ

編集ページ

ブラウザに表示できるページはすべて表示できた。
に続く。


この記事が気に入ったらサポートをしてみませんか?