Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails before_filter方法中隐藏的实例变量_Ruby On Rails_Instance Variables_Before Filter_Private Methods - Fatal编程技术网

Ruby on rails before_filter方法中隐藏的实例变量

Ruby on rails before_filter方法中隐藏的实例变量,ruby-on-rails,instance-variables,before-filter,private-methods,Ruby On Rails,Instance Variables,Before Filter,Private Methods,在私有方法中隐藏实例变量初始化是一种好的做法吗 例如,我有一个带有一些操作的用户控制器: class UsersController < ApplicationController before_filter :get_user, only: [:show, :edit, :update, :destroy] before_filter :set_user, only: [:new, :create] def index @users = User.all end

在私有方法中隐藏实例变量初始化是一种好的做法吗

例如,我有一个带有一些操作的用户控制器:

class UsersController < ApplicationController
  before_filter :get_user, only: [:show, :edit, :update, :destroy]
  before_filter :set_user, only: [:new, :create]

  def index
    @users = User.all
  end

  def show
  end

  def new
  end

  def edit
  end

  def create
    if @user.save
      redirect_to @user, notice: 'User was successfully created.'
    else
      render action: 'new'
    end
  end

  def update
    if @user.update_attributes(params[:user])
      redirect_to @user, notice: 'User was successfully updated.'
    else
      render action: 'edit'
    end
  end

  def destroy
    @user.destroy
    redirect_to users_path
  end

private

  def get_user
    @user = User.find(params[:id])
  end

  def set_user
    @user = User.new(params[:user])
  end
end

有人说这看起来像一个魔术,但它是干的。你觉得呢?

它们不是隐藏的,它们就在那里

就个人而言,当它变干时,我喜欢遵循一条规则我在某个地方读过它,但我不记得在哪里,请原谅我-当你第一次想复制内容时,你皱着眉头复制并粘贴它,但如果你想再次复制,那就是当你把它提取到一个地方


您的:load\u用户示例很好,但我不想为:set\u user费心。

这对我来说太枯燥了

before_filter对于诸如实例变量初始化之类的例程的过滤让我发疯,因为该方法看起来是空的,但是这些东西正在发生。如果该方法是空的,这没什么大不了的,但是大型方法可能会模糊过滤器,或者您可能会完全忽略它。然后,您必须找到筛选方法并在心里重新构建工作流。这使得维护变得比需要的更困难

我将放弃过滤器并调用getter/setter方法:

def show
  get_user
end  
这样您就可以看到初始化发生的位置。如果坚持使用过滤器,请在方法中添加注释,告知正在应用过滤器

就个人而言,我只为条件逻辑保留before_过滤器