我可以在散列中省略哈希的大括号吗?

时间:2014-10-17 16:17:35

标签: ruby hash

我在哈希中有一个哈希:

validates :password,
        length: { within: 5..30 },
        presence: true

是否可以省略散列中哈希的大括号?这样:

validates :password,
          length: within: 5..30,
          presence: true

引发语法错误。

2 个答案:

答案 0 :(得分:3)

更确切地说,在Hash文字中有一个Hash文字恰好是方法调用中的最后一个参数。只有当Hash是方法调用中的最后一个参数时才能省略大括号,在其他任何地方都需要它们。你的内部Hash是另一个Hash文字中的值,并且它不是方法调用中的最后一个参数,所以不,你不能这样做。

答案 1 :(得分:1)

不幸的是没有(至少我知道)因为长度需要多个参数并且期望哈希作为参数。我发现自己正在做的一件事就是在我的config / constants.rb文件中初始化这些约束,因为这些变量不会经常改变所有这些,我常常发现自己提供了多个参数来长度。

配置/ constants.rb

MODEL_LENGTH_CONSTRAINT = {
    within: 5..30,
    too_short: "must have at least %{count} words",
    too_long: "must have at most %{count} words"
}

应用程序/模型/ model.rb

validates :password,
    length: MODEL_LENGTH_CONSTRAINT,
    presence: true

我知道这并不是解决问题的真正办法,但它是一个更清洁的IMO。快乐的编码。