Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/willnet/rails-style-guide
railsのスタイルガイド
https://github.com/willnet/rails-style-guide
Last synced: 16 days ago
JSON representation
railsのスタイルガイド
- Host: GitHub
- URL: https://github.com/willnet/rails-style-guide
- Owner: willnet
- License: mit
- Created: 2016-03-17T06:40:55.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-03-17T08:04:21.000Z (almost 9 years ago)
- Last Synced: 2025-01-02T23:33:30.914Z (23 days ago)
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# rails-style-guide
railsのスタイルガイド
## skinny Controller, fat Model
### controller の action を分割する
UsersController があるとします。さらに、管理画面において、ユーザの名前を更新するフォームと、メールアドレスを更新するためのフォームを別のURLで提供する必要があるとします。簡単に書くとこのようになるでしょうか。
```ruby
class Admin::UsersController < ApplicationController
before_action :authenticatedef index
@users = User.per(10).page(params[:page])
enddef show
@user = User.find(params[:id])
enddef edit_name
@user = User.find(params[:id])
enddef update_name
@user = User.find(params[:id])
unless @user.update(name: params[:user][:name])
render :edit_name
end
enddef edit_email
@user = User.find(params[:id])
enddef update_email
@user = User.find(params[:id])
unless @user.update(name: params[:user][:email])
render :edit_email
end
end
end
```しかし上記のように、基本の7つ(index, show, new, create, edit, update, destroy)以外のアクションを定義するのは良くない傾向です。これはまだ十分小さいコードですが、この調子でなんでも一つのコントローラに詰め込もうとするとコントローラのコードが肥大化し、内容を理解するのが大変になります。
それではどのようにすると良いでしょうか。コントローラを適切に分割します。
```ruby
class Admin::UsersController < ApplicationController
before_action :authenticatedef index
@users = User.per(10).page(params[:page])
enddef show
@user = User.find(params[:id])
end
endclass Admin::Users::NamesController < ApplicationController
before_action :authenticatedef edit
@user = User.find(params[:id])
enddef update
@user = User.find(params[:id])
unless @user.update(name: params[:user][:name])
render :edit
end
end
endclass Admin::Users::EmailsController < ApplicationController
before_action :authenticatedef edit
@user = User.find(params[:id])
enddef update
@user = User.find(params[:id])
unless @user.update(name: params[:user][:email])
render :edit
end
end
end
```リソースごとに分割することで、基本の7つのアクションの範囲内で書くことができました。
## skinny ActiveRecord Model