Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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 从params散列访问值的缩写_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails Plugins - Fatal编程技术网

Ruby on rails 从params散列访问值的缩写

Ruby on rails 从params散列访问值的缩写,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-plugins,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails Plugins,我经常觉得需要从“params”散列访问单个键值对,就好像它们是局部变量一样 我发现使用局部变量而不是每次都写“params”,使我的代码更容易理解 因此,与使用params[:first_variable]之类的值不同,我将执行以下操作: first_var = params[:first_variable] second_var = params[:second_variable] ... 在我的程序中,我会使用这个简短的符号,而不是每次都写params[:first\u var]

我经常觉得需要从“params”散列访问单个键值对,就好像它们是局部变量一样

我发现使用局部变量而不是每次都写“params”,使我的代码更容易理解

因此,与使用
params[:first_variable]
之类的值不同,我将执行以下操作:

first_var  = params[:first_variable]

second_var = params[:second_variable]
... 
在我的程序中,我会使用这个简短的符号,而不是每次都写
params[:first\u var]

这样做的问题是,当params中有许多值时,函数的大小可能会显著增加

是否有更好的方法将“params”中的对象作为局部变量引用到我的函数中?

您可以重新定义
方法\u missing
在哪个类中需要此功能。如果您这样做了,请记住
方法\u missing
的基本规则-如果您无法处理它,请调用pass on(传递给
super
);并同时更新
响应?

也许是这样的

class Foo
  def method_missing(name, *args, &block)
    if params.include? name
      params[:name]
    else
      super
    end
  end

  def respond_to?(name)
    if params.include? name
      true
    else
      super
    end
  end
end

请记住,Rails已经大量使用了
method\u missing
,所以要么在您自己的类中重新定义它,要么在您不处理时将其别名为现有版本并调用它,而不是
super

您能用一些代码解释一下吗?控制器不应该做任何古怪的工作,通常你只需要得到params散列并将其交给其他人处理,你不应该真的在控制器上定义很多局部变量,如果你这样做,可能意味着你的控制器所做的比它将要做的要多得多。我不认为这会使你的代码更容易理解,而不必向加入你的项目的人充分解释(?)。但这只是一个拙见。+1但可能会很危险,这取决于params的变量名称。不要这样做。我们不是从PHP的register_global中学到了更好的东西吗?