Decent Exposure

原创
2014/01/15 07:55
阅读数 58

对一些简单的常见的DB查找进行封装
如::id, .new, .build ~~ 不包括 :xxx_id (这里要特别注意!)

慢慢看懂这例子就应该能够使用它了:

Before

class PeopleController < ApplicationController
  respond_to :html, :xml, :json
  before_filter :get_company

  def index
    @people = @company.people.where(params.except(:action, :controller, :format))
  end

  def show
    @person = @company.people.find(params[:id])
  end

  def new
    @person = @company.people.build
  end

  def edit
    @person = @company.people.find(params[:id])
  end

  def create
    @person = @company.people.build(params[:person])
    @person.save
    respond_with(@person)
  end

  def update
    @person = @company.people.find(params[:id])
    @person.update_attributes(params[:person])
    respond_with(@person)
  end

  def destroy
    @person = @company.people.find(params[:id])
    @person.destroy
    respond_with(@person)
  end

  private
  def get_company
    @company = Company.find(params[:company_id])
  end
end

After

class PeopleController < ApplicationController
  respond_to :html, :xml, :json

  expose(:company) { Company.find(params[:company_id]) }
  expose(:people) do
    company.people.where(params.except(:action, :controller, :format))
  end
  expose(:person)

  def create
    person.save
    respond_with(person)
  end

  def update
    # the attributes are already set, so no need to `update_attributes`
    person.save
    respond_with(person)
  end

  def destroy
    person.destroy
    respond_with(person)
  end
end

update 时看起来很 cool,对不?

此外

还有两三个自己定制的方法,现在可以不看,等觉得会用到的时候再翻出来就行了。

对一些简单的常见的查找进行封装,并将其以 局部变量(为什么不是实例对象?)的形式在 controller中调用,同时还将 其
变成这 helper_method 方法(这就是为什么不定义为实例对象的原因了),所以也可以在 Views 中使用。

其它

视频
Github 上的README 和 使用例子 https://github.com/voxdolo/decent_exposure/wiki/Examples

现在有点烦,要不看看源代码应该更容易理解。(好像默认的不能用于集合,即使是‘简单常见的’)

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部