Ruby on rails rails选择方法迭代数组
我是ruby和rails的新手,在我的研究中,我创建了我订单的付款类型数组Ruby on rails rails选择方法迭代数组,ruby-on-rails,ruby,arrays,iteration,Ruby On Rails,Ruby,Arrays,Iteration,我是ruby和rails的新手,在我的研究中,我创建了我订单的付款类型数组 class Order < ActiveRecord::Base PAYMENT_TYPES = [{:id => "check", :name => "Check"}, {:id => "credit_card", :name => "Credit card"}, {:id => "purchase_order", :name => "Purchase order"}]
class Order < ActiveRecord::Base
PAYMENT_TYPES = [{:id => "check", :name => "Check"}, {:id => "credit_card", :name => "Credit card"}, {:id => "purchase_order", :name => "Purchase order"}]
有什么问题吗?在
每个
块中,变量顺序
每次都用散列填充。因此,您需要使用顺序[:name]
和顺序[:id]
来访问它,而不是.name
和.id
编辑
此外,为了便于维护,您可能需要创建一个单独的PaymentType模型。这将给你更多的力量和灵活性。使用当前方法,如果以后要添加或删除付款类型,会发生什么情况?你必须编辑源代码。如果您只想为某些交易提供某些付款方式,该怎么办?谢谢vpsz!但是告诉我应该调用哪个方法来代替它。每个方法只返回我需要的数组,比如[['check','check],'credit_card','credit card']]?啊,我以前甚至没有注意到这个错误。您想使用“映射”方法
each
只是为数组中的每个项目调用块(类似于foreach循环),而map
在每个元素上运行块,然后返回结果数组(基本上使用块中提供的函数变换数组)。使用.each和.map将相当于您在RoR中所做工作的95%。
<%= f.select :pay_type, Order::PAYMENT_TYPES.each {|order| [order.name, order.id]}, :prompt => 'Select a payment method' %>
undefined method `name' for {:id=>"check", :name=>"Check"}:Hash