Railsベストプラクティス--Models

1687 ワード

1.Modelsは忙しい
方法:
コードをできるだけモデルに入れます.
理由:
    1. 下位層ほど多重化しやすい.
    2. Modelは機能クラスで、より早くテストできます.コントロールラーのようなビジネスクラスは、城を攻めるライオンたちが「私のコードが書けた」と発表するまで、本当のテストを開始することはできません.
    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 attributesの使用
@user.を使用できる場合account_settingのような属性がModelに対応する関係Modelを取得する場合、私たちは「一気に」なる機会があります.次のように:
# 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