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
すべて成功したので正常に動作することは担保されている。
試しにブラウザにアクセスしてみる。
一覧ページ
詳細ページ
編集ページ
ブラウザに表示できるページはすべて表示できた。
次に続く。
この記事が気に入ったらサポートをしてみませんか?