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
相關文章
相關標籤/搜索