多个条件不重复
Multiple conditionals without repeating
想知道是否有更简洁的方法来执行条件变量可以等于 4、6 或 8 而无需重复先前的输入?
例如
<%= form_with(model: sale, local: true) do |f| %>
<% if @sale.cost == 4 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<% elsif @sale.cost == 6 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<% elsif @sale.cost == 8 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<%= f.text_field :sale_7 %>
<%= f.text_field :sale_8 %>
<% end %>
<% end %>
所以上面是为每个语句重复前面的输入(即 <%= f.text_field :sale_1 %>
、<%= f.text_field :sale_2 %>
)。有没有办法说明 if @sale.cost == 6
然后在前 4 个之后添加两个必需的输入?例如:
<%= form_with(model: sale, local: true) do |f| %>
<% if @sale.cost == 4 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<% some statement @sale.cost == 6 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<% some statement @sale.cost == 8 %>
<%= f.text_field :sale_7 %>
<%= f.text_field :sale_8 %>
<% end %>
我还没有测试过,但这应该有效:
<% if [4,6,8].include?(@sale.cost) %>
<% @sale.cost.times do |i| %>
<%= f.text_field :"sale_#{i+1}" %>
<% end %>
<% end %>
这取决于你的逻辑,但在这种特定情况下,如果你的条件是真实的,就像你输入的数字一样,它可以像
一样简单
<%= form_with(model: sale, local: true) do |f| %>
<% if @sale.cost >= 4 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<% if @sale.cost >= 6 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<% if @sale.cost >= 8 %>
<%= f.text_field :sale_7 %>
<%= f.text_field :sale_8 %>
<% end %>
<% end %>
<% end %>
想知道是否有更简洁的方法来执行条件变量可以等于 4、6 或 8 而无需重复先前的输入?
例如
<%= form_with(model: sale, local: true) do |f| %>
<% if @sale.cost == 4 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<% elsif @sale.cost == 6 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<% elsif @sale.cost == 8 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<%= f.text_field :sale_7 %>
<%= f.text_field :sale_8 %>
<% end %>
<% end %>
所以上面是为每个语句重复前面的输入(即 <%= f.text_field :sale_1 %>
、<%= f.text_field :sale_2 %>
)。有没有办法说明 if @sale.cost == 6
然后在前 4 个之后添加两个必需的输入?例如:
<%= form_with(model: sale, local: true) do |f| %>
<% if @sale.cost == 4 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<% some statement @sale.cost == 6 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<% some statement @sale.cost == 8 %>
<%= f.text_field :sale_7 %>
<%= f.text_field :sale_8 %>
<% end %>
我还没有测试过,但这应该有效:
<% if [4,6,8].include?(@sale.cost) %>
<% @sale.cost.times do |i| %>
<%= f.text_field :"sale_#{i+1}" %>
<% end %>
<% end %>
这取决于你的逻辑,但在这种特定情况下,如果你的条件是真实的,就像你输入的数字一样,它可以像
一样简单<%= form_with(model: sale, local: true) do |f| %>
<% if @sale.cost >= 4 %>
<%= f.text_field :sale_1 %>
<%= f.text_field :sale_2 %>
<%= f.text_field :sale_3 %>
<%= f.text_field :sale_4 %>
<% if @sale.cost >= 6 %>
<%= f.text_field :sale_5 %>
<%= f.text_field :sale_6 %>
<% if @sale.cost >= 8 %>
<%= f.text_field :sale_7 %>
<%= f.text_field :sale_8 %>
<% end %>
<% end %>
<% end %>