2017-05-08 73 views
0

我试图在迭代中使用条件,但没有工作,所以这里的场景:Rails如何使条件内迭代?

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

但即使存在与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 %> 
+0

您错过了一个'end'。 'each'执行'do'和'end'之间的块。 –

+0

谢谢亚历杭德罗不错,是有更多的代码下来,所以,我只是pust那部分 – bookaka

+1

好吧,请看看@Md。 Farhan Memon的asnwer,请注意这个答案的缩进,并用这个标识符编辑你的Post。 –

回答

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这将引发错误。
  • <% %>只是执行红宝石代码,你想打印数据,所以需要使用<%= %>
  • 当你不打算使用它时,不需要将它们保存在变量中。我在检查条件中存在的对象时保存了它们,并且可以在不查询数据库的情况下显示它们。
+0

是的,但这个说法和我做的不一样吗? – bookaka

+0

现在显示未定义的局部变量或方法'产品'为#<# bookaka

+0

@bookaka检查更新后的答案,如果仍然存在错误,哪一行? –