红宝石中前导零的范围

Lis*_*nge 5 ruby forms ruby-on-rails range

我有一个表单,我的用户可以在我的网站上注册.

他们以生日,出生月和生日的形式填写他们的出生日期.

所以我使用Range在这样的表单中创建选择:

= f.select(:birthmonth, options_for_select((1..12)))
Run Code Online (Sandbox Code Playgroud)

但是这并没有像我想要的那样以零开始单位数字:01,02,03,04,05,06,07,08,09,10等等.

我甚至试过这个,但它不起作用:

= f.select(:birthmonth, options_for_select((01..12)))
Run Code Online (Sandbox Code Playgroud)

任何知道如何让Range开始使用前导零的人?或者任何其他方式这样做,以便我可以在验证中使用它?:

validates_inclusion_of :birthmonth, :in => 1..12
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 16

麻烦的是数字本身没有前导零(或者,有或者有无数个从未打印过的前导零).要获得前导零,您需要字符串.幸运的是,Ruby内置了这种字符串格式化功能.

= f.select(:birthmonth, options_for_select((1..12).map {|n| "%02d" % n}))
Run Code Online (Sandbox Code Playgroud)

%02d是一个格式化说明符,意思是"如果它小于两位数,则用前导零填充它".

要进行验证,您需要进行相同的转换:

validates_inclusion_of :birthmonth, :in => (1..12).map {|n| "%02d" % n}
Run Code Online (Sandbox Code Playgroud)

(感谢@ r-dub指出那个位.)

  • 您应该在答案中添加正确的验证语句以确保完整性.validates_inclusion_of:birthmonth,:in =>(1..12).map {| n | "%02d"%n} (2认同)

pgu*_*rio 14

你实际上可以这样做: '01'..'12'