FBCのRailsのプラクティスでdevise gemの使い方を学んでいます。
ログイン機能とプロフィールページの追加にUserモデルのcontrollerが必要になりました。
既にに必要なルーティングは追加済みだったのでrails g
コマンドでcontrollerを作成する際にルーティングの追加をスキップする方法を調べました。
結論
--skip-routes
オプションを追加するとルーティングの追加をスキップできる。
例) Userモデルのindex、showアクションを追加したcontroller作成したいがルーティング追加はスキップしたい
デフォルトではルーティングも追加されてしまう。
$ rails g controller users index show Running via Spring preloader in process 12369 create app/controllers/users_controller.rb route get 'users/index' # routes.rbへの不要な追記 get 'users/show' # routes.rbへの不要な追記 invoke erb exist app/views/users create app/views/users/index.html.erb create app/views/users/show.html.erb invoke test_unit create test/controllers/users_controller_test.rb invoke helper create app/helpers/users_helper.rb invoke test_unit invoke assets invoke scss create app/assets/stylesheets/users.scss
--skip-route
オプションを追加するとルーティング追加をスキップできる。
$ rails g controller users index show --skip-routes Running via Spring preloader in process 13318 create app/controllers/users_controller.rb invoke erb exist app/views/users create app/views/users/index.html.erb create app/views/users/show.html.erb invoke test_unit create test/controllers/users_controller_test.rb invoke helper create app/helpers/users_helper.rb invoke test_unit invoke assets invoke scss create app/assets/stylesheets/users.scss
rails g controller について
rails g controller モデル名複数形 アクション名 オプション
でcontrollerとそれに付随するファイルを自動生成してくれます。
デフォルトでは次のファイルを自動生成します。
- controller
- view
- asset
- route
- test
- helper
rails generateで自動生成されるファイルの設定 - Qiita
その他のオプションについて
ルーティング作成のスキップ以外にも次のようなオプションが用意されています。
- assets成をスキップ:
--no-assets
- test作成をスキップ:
--no-test-framework
- helper作成をスキップ:
--no-helper
rails generate controller で不要なファイルを生み出さないために - Qiita
他にも色々とオプションが用意されているので詳細はrails g controller -h
でヘルプを参照してください。
rails g で同時作成するファイルの設定を変更する
設定ファイルである./config/application.rb
に設定を追加することで同時作成するファイルのデフォルト設定を変更できるようです。
rails generateで自動生成されるファイルの設定 - Qiita
# ./config/application.rb ... module BooksApp class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.1 # 下記を追記 config.generators do |g| g.assets false # assetファイルの作成をスキップ g.skip_routes false # route追加をスキップ g.test_framework false # testファイルの作成をスキップ end end end
実際にデフォルトの設定変更は行っていないので機会があればやってみたいと思います。
まとめ
controllerを作成したかっただけなのに不要なルーティングが追加されるので時間を費やしてしまった。 Railsは色々と便利なコマンドや機能が揃っているが、慣れるまでがちょっと大変だなと感じました。