rails应用程序中的`to_hash`是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rails应用程序中的`to_hash`是什么?相关的知识,希望对你有一定的参考价值。

在我的rails应用程序中,我看到很多.to_hash.究竟是什么?

     def to_hash
       serializable_hash
     end
答案

当方法具有关键字参数时,Ruby会将Hash参数隐式转换为关键字参数。在分配可选参数之前,通过调用to_hashon作为该方法的最后一个参数来执行此转换。如果to_hash返回Hash实例,则将散列作为该方法的关键字参数。

除非你确定知道你在做什么,否则永远不要实现隐式转换方法!例如,人们普遍认为,#to_hash方法正在实施(可能是因为“比名称更漂亮”而不是#to_h?)并导致最奇怪的效果。

def method(arg = 'arg', kw_arg: 'kw_arg')
  [arg, kw_arg]
end

# As expected:
method() # => ['arg', 'kw_arg']
method(kw_arg: 'your keyword') # => ['arg', 'your keyword']

# Intended as nicety: implicit hash conversion
method({kw_arg: 'hash kw_arg'}) # => ['arg', 'hash kw_arg']

# But has bad side effects:
o = String.new('example object')
def o.to_hash # Now o responds to #to_hash
  { kw_arg: 'o.to_hash' }
end

method(o)
# => ['arg', 'o.to_hash']
# Ruby thinks that o is a Hash and converts it to keyword arguments -.-

method(o, o)
# => ['example object', 'o.to_hash']
# Same here, but since only the *last* argument is converted,
# the first is properly assigned to the first optional argument

通常,当您需要将其显式转换为哈希时,请不要定义to_hash。改为定义to_h。

请参阅Here

以上是关于rails应用程序中的`to_hash`是什么?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 中的 to_s 与 to_str(以及 to_i/to_a/to_h 与 to_int/to_ary/to_hash)

如何在 Rails 中解析 CSV 期间更改编码

Ruby--CSV

我们如何避免控制器中方法的重复/重复 - RAILS 3+

什么是 Rails 3 中的质量分配

如何避免 Rails 中的 BREACH 攻击?