更优雅的方式,包括基于价值的不同内容

时间:2017-03-14 01:11:16

标签: ruby-on-rails arrays ruby

是否有更优雅的方式来编写此代码,可能是通过定义数组[[1, "test1"], [2, "test2"], …]

<%- if c.current_state == 1 %>
Test1
<% elsif c.current_state == 2 %>
Test2
<% elsif c.current_state == 3 %>
Test3
<% elsif c.current_state == 4 %>
Test4
<% elsif c.current_state == 5 %>
Test5
<% elsif c.current_state == 6 %>
Test6
<% end %>

1 个答案:

答案 0 :(得分:1)

在您的视图中,您可以使用

完成相同的操作
Test<%= c.current_state %>

所以如果没有更多细节,我无法给你进一步的建议。但是你应该阅读Enumerable

使用map

1.upto(6).map {|v| "test#{v}" }

会给你

["test1", "test2", "test3", "test4", "test5", "test6"]

使用map.with_index

1.upto(6).map.with_index {|v| [v, "test#{v}"] }

会为您提供所需的数组

[[1, "test1"], [2, "test2"], [3, "test3"], [4, "test4"], [5, "test5"], [6, "test6"]]

使用inject

1.upto(6).inject({}) {|h,k| h[k] = "test#{k}"; h }

会给你

{1=>"test1", 2=>"test2", 3=>"test3", 4=>"test4", 5=>"test5", 6=>"test6"}