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