如何缩短Rails中的Controller动作

时间:2013-05-20 02:04:45

标签: ruby-on-rails-3 controller ruby-on-rails-3.2

def index
    @customers = current_user.customers
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @customers }
    end
  end

  def show
    @customer = current_user.customers.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @customer }
    end
  end

  def new
    @customer = current_user.customers.new
  end

这是我的CustomerController的一小部分。原点@customers@customers = customers,依此类推。

我想为current_user索引/ show / new。这是有效的,但我必须手动更改所有Controller操作。 此外,我的所有自动规范文件都只是针对@customer = customers进行测试。

这似乎不是手动更改所有这些内容的方式。

对此有更好的解决方案吗?

提前谢谢 最好的祝福 denym

2 个答案:

答案 0 :(得分:0)

Rails解决这个问题的方法是将inherited_resources gem与Responders结合使用。确切地说,您的用例在Overwriting Defaults section of inherited_resources

中有所描述

在JoséValims一书Crafting Rails Applications: Expert Practices for Everyday Rails Development中的“用响应者和生成器编写DRY控制器”一章中也讨论了这种方法。

答案 1 :(得分:0)

我认为你正在寻找一个before_filter。类似的东西:

before_filter :valid_user, only: [:index, :new, :show]

def valid_user
  redirect_to root_path if current_user.nil?
end