多个条件,无需重复

时间:2018-12-04 21:21:45

标签: ruby-on-rails ruby-on-rails-5 erb

想知道是否有一种更干净的方法来做一个条件,即变量可以等于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 %>)。是否有一种方法可以说明,如果@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 %>

2 个答案:

答案 0 :(得分:3)

我还没有测试过,但这应该可以工作:

<% if [4,6,8].include?(@sale.cost) %>
  <% @sale.cost.times do |i| %>
    <%= f.text_field :"sale_#{i+1}" %>
  <% end %>
<% end %>

答案 1 :(得分:2)

这取决于您的逻辑,但是在这种特定情况下,如果您的条件是真实的,就像您输入的数字一样,它可能就很简单

first.onclick = function() {
    first.style.animation = 'none';
    second.style.animation = 'none';
    first.offsetHeight;
    second.offsetHeight;
    first.style.animation = 'firstPageActivate 2s ease forwards';
    second.style.animation = 'secondPageActivate 2s ease reverse forwards';
}
second.onclick = function() {
    first.style.animation = 'none';
    second.style.animation = 'none';
    first.offsetHeight;
    second.offsetHeight;
    first.style.animation = 'firstPageActivate 2s ease reverse forwards';
    second.style.animation = 'secondPageActivate 2s ease forwards';
}