Model に散らばる validates メソッドを concern で集約する
よくある事例
validates だけで 10 行ぐらいクラスを食いつぶす
app/models/book.rb
class Book < ActiveRecord::Base validates_presence_of :name, :password ... validates_length_of :title, max ... validates_foo validates_bar validates_qux . . . validates_me end
解決策 (Rails 4 以上?)
concern の module に集約する
app/models/concern/validation_book.rb
module ValidationBook extend ActiveSupport::Concern included do validates_presence_of :name, :password ... validates_length_of :title, max ... validates_foo validates_bar validates_qux . . . validates_me end end
app/models/book.rb
class Book < ActiveRecord::Base include ValidationBook end
foo!
コンポジション的思考と見られ、よりオブジェクト指向設計らしくなる
もっと早くに知っときゃよかった
thanks