Ruby on rails Rails:ActionController::Parameters#delete返回值而不是键值对?

Ruby on rails Rails:ActionController::Parameters#delete返回值而不是键值对?,ruby-on-rails,ruby,Ruby On Rails,Ruby,根据Rails API 从参数中删除并返回其键等于键的键值对。如果找不到键,则返回默认值。如果给出了可选代码块,但找不到键,请传入键并返回代码块的结果 然而,当我从rails上的类中提取参数并执行 .class,它返回数组,而不是散列 def create @var = myClass.new(param_function.except(:param1)) weird = param_function.delete(:param5) puts weird.class en

根据Rails API

参数
中删除并返回其键等于键的键值对。如果找不到键,则返回默认值。如果给出了可选代码块,但找不到键,请传入键并返回代码块的结果

然而,当我从rails上的类中提取参数并执行
.class
,它返回
数组
,而不是
散列

def create
    @var = myClass.new(param_function.except(:param1))
    weird = param_function.delete(:param5)
    puts weird.class
end

def param_function
    params.require(:my_class).permit(
      :param1,
      :param2,
      :param3,
      :param4,
      :param5 => []
    )
 end

delete应返回一个散列,其中键为
param5
,值为值的
数组
,因此
wird
应为散列。但是,它将数组作为结果放入。

@Stefan但是当您放入它时,它只返回一个值数组tho?正如API所说,它应该返回类似于“[param5,val1,val2,]”的内容,所以当我把它放进去时,它应该返回'param5','val1','val2'。但是,它只返回'val1','val2'。钥匙没有打印出来。你是对的,我已经删除了我以前的评论。文档是错误的(或者至少是非常误导)
delete
的工作原理实际上类似于,即它删除键值对并返回(仅返回)值。您可能正在查找。@aDev ruby没有
Hash\35; delete
(删除意味着是变异的,因此bang是多余的)因此rails
HashWithInferenceAccess#delete
的工作方式与您所看到的
Hash#delete
完全相同,
ActionController::Parameters
本质上只是委托此调用,如您所展示的文档所示。这些文件只是incorrect@engineersmnky是的,我在发表评论后马上读到了。在意识到这是一个错误的假设后,我删除了它。谢谢你的消息。