LoginSignup
1
0

More than 3 years have passed since last update.

Railsチュートリアル 第2章

Posted at

この章では、scaffold機能を使ってコードを自動生成する方法などを学んだ。

scaffoldとは

本来、Railsでアプリケーションを作成するには、モデル、コントローラー、ビュー等を作り、ルーティングも作成する必要があるが、それをコマンド一つで一括で作成してくれるのがscaffold。

試しにscaffoldを試してみると

今回は、ユーザー情報(名前、メールアドレス)の登録・更新・削除が行える画面を作ってみる。

$ rails generate scaffold User name:string email:string
  invoke  active_record
  create    db/migrate/20200122063729_create_users.rb
  create    app/models/user.rb                  ⇨モデル作成
  invoke    test_unit
  create      test/models/user_test.rb
  create      test/fixtures/users.yml
  invoke  resource_route                      ⇨ルーティング作成
   route    resources :users
  invoke  scaffold_controller
  create    app/controllers/users_controller.rb        ⇨コントローラー作成
  invoke    erb
  create      app/views/users                   ⇨ビュー作成
  create      app/views/users/index.html.erb
  create      app/views/users/edit.html.erb
  create      app/views/users/show.html.erb
  create      app/views/users/new.html.erb
  create      app/views/users/_form.html.erb
  invoke    test_unit
  create      test/controllers/users_controller_test.rb
  invoke    helper
  create      app/helpers/users_helper.rb
  invoke      test_unit
  invoke    jbuilder
  create      app/views/users/index.json.jbuilder
  create      app/views/users/show.json.jbuilder
  create      app/views/users/_user.json.jbuilder
  invoke  test_unit
  create    test/system/users_test.rb
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/users.coffee
  invoke    scss
  create      app/assets/stylesheets/users.scss
  invoke  scss
  create    app/assets/stylesheets/scaffolds.scss

config/routes.rb に「resources :users」が追加された事で、Railsで定義されている7つのアクションがセットで追加されていることがわかります。

$ rails routes
   Prefix Verb   URI Pattern               Controller#Action
    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy
     root GET    /                         

正確に言うと、updateが2つ存在し、8つのアクションが作成されているが、PUTリクエストの方は昔の名残?か何かで実際にはPATCHが使われる。

また、7つのアクションが作成されると言ったが、usersコントローラーを見ると、7つ以上のアクションが自動で作成されているが、このcreate,update,destroyはページを出力せずベータベース上のユーザー情報の操作するだけのため。

一括で作成できたが、問題もたくさん

scaffoldコマンド一つで、ユーザーの新規登録、更新、削除が行える画面が作成できたが、この時点では下記のような問題が残っている。

  • データの検証が行われていないので、空情報を登録できてしまう
  • ユーザー認証が行われていないので、誰でも自由に登録や削除ができてしまう
  • テストが書かれていない
  • レイアウトが整っていない

scaffoldの取り消し

間違った名前などで作成してしまったなどした時の取り消し手順

$ rails destroy scaffold users

但し、これだけではデータベースにまだテーブルが残ってしまうので、マイグレーションファイルを作成する。

rails g migration users

作成したマイグレーションフィアるにusersテーブルの削除命令を書く。

class Users < ActiveRecord::Migration[5.1]
  def change
    drop_table :users
  end
end

あとはマイグレートして無事完了

$ rails db:migrate

@記号で始まる変数

@で始まる変数をインスタンス変数と呼び、コントローラー内で宣言されたインスタンス変数はビューでも使えるようになる。
つまり、逆に@が付いていない変数はビューでは使えない。

def index
    @users = User.all
end

この章で失敗したこと

試しにscaffoldしたファイル群を削除するのをしたときにusersテーブルの削除するマイグレーションファイルが残ったまま、herokuにpushしてしまい、migrateしてもエラーが出ているのを5分ぐらい気づけなかった。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0