首页 > 解决方案 > 多个条件不重复

问题描述

想知道当变量可以等于 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 %>

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

解决方案


我没有对此进行测试,但这应该可以工作:

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

推荐阅读