我在控制器的索引操作中有这一行:
@orders = Order.all.map{|k| k.transaction}.keep_if{ |a| a != nil }
问题是,@orders
正在返回一个数组。我需要@orders像Order.all
这样的对象才能正确使用will_paginate
和pundit
GEMS。
是否有任何对象返回map
方法的替代方法?
提前致谢。
答案 0 :(得分:2)
假设transaction
是Order
模型中的关联,您只需运行查询,只选择包含交易的订单:
Order.where.not(transaction_id: nil)
您可以更进一步,并将其定义为Order
中的范围:
class Order < ActiveRecord::Base
has_one :transaction
scope :with_transaction, -> { where.not(transaction_id: nil) }
end
然后,在您的控制器中,您可以简单地执行此操作,而不必担心模型的内部细节:
Order.with_transaction
您可以阅读有关ActiveRecord scopes in the Rails documentation的更多信息。