【问题标题】:Conditionals and overriding条件和覆盖
【发布时间】:2018-08-25 23:25:48
【问题描述】:

我正在使用条件来检查两个值是否存在。我想用第二个条件覆盖第一个条件。如果第二个存在,那么第一个很可能会存在,如果这是有道理的。不是我遇到的问题是使用两种不同的调用方法。

到目前为止我所拥有的:

<% @data.each do |i| %>
  <% if i.stock.present? %>
    In Stock
  <% elsif i.sold.present? %>
    Sold
  <% else %>
    n/a
 <% end %>
<% end %>

因此,如果有库存则显示“In Stock”,如果已售出则显示“Sold”。

【问题讨论】:

  • 这就是为什么 TDD 很重要。在每个示例案例中,您期望得到什么输出?
  • 问题是什么?
  • 当你说“用第二个条件覆盖第一个条件”时,我假设你说i.stock.present? 总是正确的?股票是整数吗?如果是这样,在 0 上调用 present? 将返回 true
  • 我的意思是,如果第一个条件为真,则显示库存消息,但如果存在第二个条件,则显示已售出。如果不存在,则不显示任何内容。但是如果第二个条件存在,第一个条件将永远存在,这就是我遇到的问题。目前,如果两者都存在,它会同时显示库存和已售消息。
  • “目前,如果两者都存在,它会同时显示库存和已售消息”。你确定吗?或者,它是否同时显示是因为您正在循环访问 @data,其中包含有库存和已售出的商品?

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


【解决方案1】:

我想我有一个解决方案,但如果有更好的方法,请随时告诉我。这是使用 unless 语句,似乎显示了我需要的内容。

<% @data.each do |i| %>
  <% unless i.stock.present? %>
    In Stock
  <% else if i.sold.present? %>
      Sold
    <% else %>
      n/a
  <% end %>
 <% end %>
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2021-03-28
    相关资源
    最近更新 更多