Ruby on rails 不重复的多个条件句

Ruby on rails 不重复的多个条件句,ruby-on-rails,ruby-on-rails-5,erb,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 %>

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

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

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

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

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

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

= 4 %>
= 6 %>
= 8 %>

啊,就这么简单。谢谢你的帮助。这里的“一些声明”是什么?抱歉@emaillenin,我只是复制/粘贴了问题中的代码,以前没有删除它,但现在已经编辑了。啊,就是这么简单。谢谢你的帮助。这里的“一些声明”是什么?抱歉@emaillenin,我只是复制/粘贴了问题中的代码,以前没有删除它,但现在已经编辑好了。你可以替换
“sale##{I+1}”。如果你愿意,可以用
:“sale##{I+1}”替换
。和
@sale.cost.times.每个do | i |
都可以是
@sale.cost.times do | i |
[4,6,8]。包括哪些?5
将返回false,因此如果
@sale.cost
为5,则需要创建任何文本字段。是的,当sale cost为5时,我们不应创建文本字段。检查问题。当sale cost为5时,if条件都不会为真,因此不会创建文本字段。如果需要,请替换
“sale#{i+1}”。to_sym
:“sale#{i+1}”
。和
@sale.cost.times.每个do | i |
都可以是
@sale.cost.times do | i |
[4,6,8]。包括哪些?5
将返回false,因此如果
@sale.cost
为5,则需要创建任何文本字段。是的,当sale cost为5时,我们不应创建文本字段。检查问题。当销售成本为5时,if条件都不为true,所以不会创建文本字段