Rails - 返回对象的Map函数替代

时间:2014-12-14 09:59:38

标签: ruby-on-rails ruby-on-rails-4

我在控制器的索引操作中有这一行:

@orders = Order.all.map{|k| k.transaction}.keep_if{ |a| a != nil }

问题是,@orders正在返回一个数组。我需要@orders像Order.all这样的对象才能正确使用will_paginatepundit GEMS。

是否有任何对象返回map方法的替代方法?

提前致谢。

1 个答案:

答案 0 :(得分:2)

假设transactionOrder模型中的关联,您只需运行查询,只选择包含交易的订单:

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的更多信息。