Несколько условных выражений без повторения - PullRequest
0 голосов
/ 05 декабря 2018

Хотите знать, есть ли более чистый метод выполнения условия, когда переменная может равняться 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 голосов
/ 05 декабря 2018

это зависит от вашей логики, но в этом конкретном случае, если ваши условные выражения действительны, например, числа, которые вы вводите, это может быть так просто, как

<%= 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 %>
0 голосов
/ 05 декабря 2018

Я не проверял это, но это должно работать:

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