我正在使用Ruby on Rails创建一个网站。 我有一个看起来像这样的常量:
SIZE_CONVERT = {
shoes: {
men: {
'1' => ['32', '19,7', '32', '0.5' ],
'1.5' => ['32.5', '20.3', '32.5', '1' ],
'2' => ['33', '20.6', '33', '1.5' ],
'2.5' => ['33.5', '21', '33.5', '2' ],
'3' => ['34', '21.6', '34', '2.5' ]}}}
当我为迭代此哈希的模型创建方法时,它表现得很奇怪。我想返回一个看起来像SIZE: 34
的字符串,或者只返回No match
字符串。但是,当我调用此方法时,它不会返回一个字符串,它会返回我所有的SIZE_CONVERT[:shoes][:men]
哈希值。
def convert_shoe(gender, size)
if size.to_f < 3.0
SIZE_CONVERT[:shoes][gender].each do |s|
if size == s[1][3]
"SIZE: " + s[1][2]
else
"No match"
end
end
end
end
答案 0 :(得分:3)
这是因为你要返回最后一个评估的表达式,在这种情况下是
的返回
SIZE_CONVERT[:shoes][gender].each do |s|
if size == s[1][3]
"SIZE: " + s[1][2]
else
"No match"
end
end
[1,2,3,4] .each返回[1,2,3,4],所以SIZE_CONVERT [:shoes] [性别](数组)将在.each方法上返回该数组
您可以通过返回匹配
来解决此问题
def convert_shoe(gender, size)
if size.to_f < 3.0
SIZE_CONVERT[:shoes][gender].each do |s|
if size == s[1][3]
return "SIZE: " + s[1][2]
end
end
end
return "No match"
end
但是最后,虽然正在做这项工作,但是还不够rubyist,你可以使用功能很酷的东西,比如Array #find方法,这样:
def convert_shoe(gender, size)
if size.to_f < 3.0
found_size = SIZE_CONVERT[:shoes][gender].find do |s|
size == s[1][3]
end
return "SIZE: " + found_size[1][2] if found_size
end
"No match"
end