Rails最佳实践--Models

1. Models很忙
    方法:
    把代码尽可能往model里放。
    理由:
    1. 越底层越易复用。
    2. Model是功能类,可更早测试。业务类如controller,直到攻城狮们宣布“个人代码写好了”,才能开始真正测试。
    3. Rails框架下Model很强大,而Controller显得很单薄。
    适用版本:
    all
2. 把查询语句写在scope中
  代码速查:
    
class Product < ActiveRecord::Base
      belongs_to :category
      named_scope :cheap, :conditions => { :price => 0..5 }
      named_scope :recent, lambda { |*args| {:conditions => ["released_at > ?", (args.first || 2.weeks.ago)]} }
      named_scope :visible, :include => :category, :conditions => { 'categories.hidden' => false }
end

    使用:

3. 使用嵌套属性 Nested attributessql

    当咱们能够使用@user.account_setting这样的属性来获取一个Model对应的关系Model时,咱们有机会“一鼓作气”。就像下面:ruby

# controller中,注意咱们其实在这里创建了: AccountSetting.new
  def new
    @user = User.new (:account_setting => AccountSetting.new)
  end
  def create
    @user = User.new(params[:user])
    @user.save
  end
# Model
  has_one :account_setting, :dependent => :destroy
  accepts_nested_attributes_for :account_setting

# views
  <%= form_for(@user) do |f| %>
    ...
    <%= f. fields_for :account_setting do |a| %>

4. 快速migration:

script/generate migration AddRoleToUser role:string





  参考:
  http://cn.asciicasts.com/episodes/215-advanced-queries-in-rails-3
  http://railscasts.com/episodes/108-named-scope  Rails2.1
  http://pivotallabs.com/users/nick/blog/articles/284-hasfinder-it-s-now-easier-than-ever-to-create-complex-re-usable-sql-queries  若是使用更早的版本,须要has_finder
相关文章
相关标签/搜索