Rails如何进行条件内部迭代?

时间:2017-05-08 18:47:40

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试在迭代中使用条件,但没有这样做,这里的场景:

在这种情况下,如果订单或产品存在,应该只显示订单和带有反馈的产品。

但即使存在也会显示odata和pdata的反馈。

有人知道为什么吗?

<% @feedbacks.each do |feedback| %>
      <% if order.present?  && product.present?  %>
      <% order = feedback.order %>
      <% product = order.product %>
      <% else %>
<% odata = feedback.odata %>
  <% pdata = odata.pdata %>
  <% end %>

1 个答案:

答案 0 :(得分:1)

我想这就是你要做的,

<% @feedbacks.each do |feedback| %>
  <% if (order = feedback.order).present? && (product = feedback.product).present? %>
    <%= order.title %>
    <%= product.title %>
  <% else %>
    <%= (odata = feedback.odata).name %>
    <%= odata.pdata.name %>
  <% end %>
<% end %>

注意:titlename是假定的列,请将其替换为您所需的/受尊重的属性。 请仔细阅读this以了解各种erb标记之间的区别。

比较:

  • 针对if条件,您尝试直接调用orderproduct,这会因为与feedback相关而引发错误。
  • <% %>只执行ruby代码,您想要打印数据,因此需要使用<%= %>
  • 当您不打算使用它时,无需将它们保存在变量中。我在检查条件中是否存在对象的同时保存了它们,并且可以在不查询数据库的情况下显示它们。
相关问题