Ruby on Rails:迭代语法错误

时间:2015-10-07 19:32:47

标签: ruby

enter image description here

我试图让这个循环迭代卡片类型末尾的数字。我无法弄清楚正确的语法。我尝试了很多不同的东西。

见红色箭头。

2 个答案:

答案 0 :(得分:3)

如果真的想要这样做,你就可以使用send方法:

if @order.send("cardtype#{n}") != "none"

这将在@order对象上执行“cardtype#{n}”方法。

然而,这通常不是最好的主意,我建议你考虑将此属性转换为has_many关系或可序列化数组。

查看本教程,了解关联如何工作(最有可能是您想要使用的):http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:1)

据我所知,cardtypeN是一个方法(数据库列?),其中N是一个整数。这意味着没有简单的方法来循环这些属性,就像Ruby虚拟机本身一样,即使你称它们为cardtype1cardtype2等,这些方法也没有相互联系。

事实上,你的代码突出了一个非常糟糕的设计决定。如果一个订单可以有更多的卡类型,那么你应该真的需要一个卡片型号,并将订单和卡片类型与1对多的关系联系起来。

但是,要回答您的问题,您可以使用以下方法之一动态编写方法:

# [] syntax
@order["cardtype#{n}"]
# send
@order.send("cardtype#{n}")

每种方法各有利弊。说,你可以从1循环到最大的cardtypes数量

<% 1.to(10).each do |index| %>
  <% if @order["cardtype#{index}"] != "none" %>
     whatever
  <% end %>
<% end %>

但是,正如我所提到的,你真的想重新设计你的模型。