Несколько условных выражений без повторения

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

🤔 А знаете ли вы, что...
Один из популярных примеров использования Rails - Twitter, который начал свою историю как Rails-приложение.


40
2

Ответы:

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

<% 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 %>