ruby-on-rails - 多个条件不重复
问题描述
想知道当变量可以等于 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 %>
解决方案
我没有对此进行测试,但这应该可以工作:
<% if [4,6,8].include?(@sale.cost) %>
<% @sale.cost.times do |i| %>
<%= f.text_field :"sale_#{i+1}" %>
<% end %>
<% end %>
推荐阅读
- jquery - 点击时的 JQuery 仅正确列出项目一次,然后始终保持最后一个值
- mysql - 我希望 sql IN 运算符在找不到记录时返回 null
- rust - 除了新关键字之外,原始标识符的用例是什么?
- qt - 在 Qt 控制台应用程序中,为什么代码需要 QTimer 才能正确退出?
- javascript - 使用reduce删除javascript
- spreadsheet - 从 Praat 上的文本电子表格中选择特定数据
- c# - 我收到此代码的错误“必须声明标量值@time”。需要帮助来修复它
- r - 在 R 的嵌套列表中应用 approxfun
- php - 脚本未遍历目录中的所有文件
- css - 幻影谷歌字体加载?