可能会出现一个重复的问题,但似乎找不到解决这个问题的方法。
我试图让Payments
的所有Orders
属于Customer
。
我有这个
# customer.rb
has_many :orders, dependent: :restrict_with_exception, class_name: "Shoppe::Order"
# order.rb
belongs_to :customer, class_name: 'Shoppe::Customer'
# payment.rb
belongs_to :order, class_name: 'Shoppe::Order'
# payment_controller.rb
def index
@payments ||= []
@customer_orders = @customer.orders.ordered.load
@customer_orders.each do |d|
@payments << d.payments
end
end
在视图中......
for payment in @payments
tr
td
= payment.id
我收到错误 -
undefined method `id' for #<ActiveRecord::Associations::CollectionProxy []>
非常感谢您解决此问题的任何帮助
答案 0 :(得分:0)
您的问题是,您正在将ActiveRecord::Associations::CollectionProxy
个对象(collection
个Payment
个实例)插入到数组中。
含义:现在您的数组是multi-dimentional
数组。所以,现在当你循环时,迭代器会让你collection
而不是单个payment
个对象。
解决方案:
您需要flatten
集合
# payment_controller.rb
def index
@payments ||= []
@customer_orders = @customer.orders.ordered.load
@customer_orders.each do |d|
@payments << d.payments
end
end
@payments = @payments.flatten
现在每个项目都应该响应id
方法
了解有关ActiveRecord::Associations::CollectionProxy
的更多信息,请参阅
http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html
让我知道这是否有效