And*_*rew 2 ruby ruby-on-rails
我正在使用看起来像这样的哈希:
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
Run Code Online (Sandbox Code Playgroud)
但是,它可能只有一个项目:
h = {
"side2"=>["verde", "Verde"]
}
Run Code Online (Sandbox Code Playgroud)
我想输出哈希,使它看起来像这样:
用户将side1从绿色更改为绿色,将 side2从verde更改为Verde
当有两个项目将与"和"分开.否则它将如下所示:
用户将ver2改为verde
这一切都发生在我的rails视图脚本中.如何编写代码才能执行此操作?
你可以这样做:
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"
Run Code Online (Sandbox Code Playgroud)
因此,在ERB视图中:
User changed <%= h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ') %>.
Run Code Online (Sandbox Code Playgroud)
如果你做了很多这样的事情,那么你可能想为它构建一个帮助器.
您也可以使用,to_sentence因为您在Rails中:
User changed <%= h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.to_sentence %>.
Run Code Online (Sandbox Code Playgroud)
该to_sentence方法还可以更好地扩展到两个以上的元素.所以,如果你也有"side3"=>["pancakes", "Pancakes"],那么你会得到:
User changed side1 from green to Green, side2 from verde to Verde, and side3 from pancakes to Pancakes.
Run Code Online (Sandbox Code Playgroud)