答案 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虚拟机本身一样,即使你称它们为cardtype1
,cardtype2
等,这些方法也没有相互联系。
事实上,你的代码突出了一个非常糟糕的设计决定。如果一个订单可以有更多的卡类型,那么你应该真的需要一个卡片型号,并将订单和卡片类型与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 %>
但是,正如我所提到的,你真的想重新设计你的模型。