Ruby on rails Rails:ActionController::Parameters#delete返回值而不是键值对?
根据Rails API 从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上的类中提取参数并执行
.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是多余的)因此railsHashWithInferenceAccess#delete
的工作方式与您所看到的Hash#delete
完全相同,ActionController::Parameters
本质上只是委托此调用,如您所展示的文档所示。这些文件只是incorrect@engineersmnky是的,我在发表评论后马上读到了。在意识到这是一个错误的假设后,我删除了它。谢谢你的消息。