Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails选择方法迭代数组_Ruby On Rails_Ruby_Arrays_Iteration - Fatal编程技术网

Ruby on rails 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"}]

我是ruby和rails的新手,在我的研究中,我创建了我订单的付款类型数组

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