我正在使用看起来像这样的散列:
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
但是,它可能只有一个项目:
h = {
"side2"=>["verde", "Verde"]
}
我想输出散列,使其看起来像这样:
User changed side1 from green to Green and side2 from verde to Verde
当有两个项目时,将用“和”分隔。否则它看起来像这样:
User changed side2 from verde to Verde
这一切都发生在我的 Rails View 脚本中。如何编写代码才能执行此操作?
最佳答案
你可以这样做:
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# "side1 from green to Green and side2 from verde to Verde"
h = {
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# side2 from verde to Verde"
因此,在 ERB View 中:
User changed <%= h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ') %>.
如果您经常做这类事情,那么您可能想为它构建一个帮助器。
你也可以使用 to_sentence
因为你在 Rails 中:
User changed <%= h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.to_sentence %>.
to_sentence
方法也可以更好地扩展到两个以上的元素。所以,如果你还有 "side3"=>["pancakes", "Pancakes"]
,那么你会得到:
User changed side1 from green to Green, side2 from verde to Verde, and side3 from pancakes to Pancakes.
关于ruby-on-rails - Ruby:如何迭代散列并根据项目数量做一些不同的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6965141/