每天一剂Rails良药之DRY Up Your ActiveRecord Code With Scoping

Rails真的是在搜肠刮肚挖空心思想方设法的给代码减肥瘦身,这次我们来看看with_scope方法
class PostsController < ApplicationController
  before_filter :scope_posts_to_user

  def show
    @posts = Post.find(:all)
  end

  def create
    @post = Post.create(params[:post])
  end

  private

  def scope_posts_to_user
    Post.with_scope({
      :find => {:conditions => ['user_id = ?', @user.id]},
      :create => {:user =. @user}
    }) { yield }
  end

上面的yield块也可以用来find或create Post
with_scope方法还可以嵌套scope,详见 http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M001024

你可能感兴趣的:(html,UP,ActiveRecord,Rails)