将Rails中的一个Model按功能拆分 进行管理

在开发Rails应用中,随着业务的扩大,Model中的代码量越来越大,(本来在Rails中也是说瘦Controller,胖Model,不是吗?),上百上千行代码也是很常见的,所以很有必要将单个Model将照不同的作用分开,这样代码维护性也好。
我在 http://github.com/courtenay/altered_beast/tree/master/config/initializers/concerns.rb看到一个很好的简单的方法:
建立 RAILS_ROOT/config/initializers/concerns.rb文件
class << ActiveRecord::Base
  def concerned_with(*concerns)
    concerns.each do |concern|
      require_dependency "#{name.underscore}/#{concern}"
    end
  end
end

现在Model就有了一个 concerned_with方法,例如在User这个Model中,我们可以将validation和一些业务方法分开来管理:
RAILS_ROOT/app/models/user.rb
class User < ActiveRecord::Base
	concerned_with :validations, :service
end


现在建立 RAILS_ROOT/app/models/user/validations.rb文件:
class User < ActiveRecord::Base
  validates_presence_of :name
end


RAILS_ROOT/app/models/user/service.rb
class User < ActiveRecord::Base
  def self.authenticate(name, password)
    find_by_name_and_password(name, password)
  end
end

这以上只是一个很小的例子而已.

面对这样,是不是感觉很舒服呢?

你可能感兴趣的:(DAO,框架,Ruby,Rails,ActiveRecord)