gpt4 book ai didi

ruby-on-rails - 对象集合的 Rails 模型类方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:49 24 4
gpt4 key购买 nike

我在编写用于 ActiveRecord 集合的类方法时遇到问题对象。我在过去几个小时内两次遇到这个问题,这似乎是一个简单的问题,所以我知道我遗漏了一些东西,但我无法在其他地方找到答案。

例子:

class Order < ActiveRecord::Base

belongs_to :customer

scope :month, -> { where('order_date > ?', DateTime.now.beginning_of_month.utc) }

def self.first_order_count
map(&:first_for_customer?).count(true)
end

def first_for_customer?
self == customer.orders.first
# this self == bit seems awkward, but that's a separate question...
end

end

如果我调用 Order.month.first_order_count , 我得到 NoMethodError: undefined method 'map' for #<Class:...

据我所知,那是因为 map不能直接在 Order 上调用, 但需要 Enumerable对象代替。如果我调用 Order.year.map(&:first_for_customer?).count(true) ,我得到了想要的结果。

编写用于 ActiveRecord 集合的方法的正确方法是什么?对象,但不直接在类上?

最佳答案

在您的情况下,您可以在这种情况下使用技巧。

def self.first_order_count
all.map(&:first_for_customer?).count(true)
end

可以做到这一点,没有任何其他问题,如果您将此方法连接到 where 子句上,您仍然可以从那个位置获得结果,如果您直接在 Order< 上调用此方法,您将获得所需的结果.

关于ruby-on-rails - 对象集合的 Rails 模型类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31155085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com