我有一个事件记录,其中有一个用例:我想在 ActiveRecord
scopes
中使用 map
。以下是我的代码:
class SupportedGeoIdAndLocation < ActiveRecord::Base
scope :supported_geo_ids, lambda { all.map(&:geo_id).uniq }
# also tried: scope :supported_geo_ids, lambda { select('distinct geo_id').map(&:geo_id).uniq }
scope :locations_for_geo_id, lambda { |geo_id| where(:geo_id => geo_id).map(&:location) }
end
但是当我执行 SupportedGeoIdAndLocation.supported_geo_ids
时,我得到空数组,而 SupportedGeoIdAndLocation.all.map(&:geo_id).uniq
给出了我想要的结果。
我正在寻找一种方法,以便可以使用 lambda 一次完成,而不是通过链接不同的方法并完全避免类函数。
看起来我使用范围的方式不对,请告诉我正确的方法。
版本:padrino
:0.10.5,ruby
:ruby-1.9.3-p429,ActiveRecord
:3.1.6
最佳答案
scope
应返回一个 ActiveRecord::Relation
,因此可以将范围与另一个范围或类方法等链接起来。
如果要获取数组,请改用类方法。
def self.supported_geo_ids
all.map(&:geo_id).uniq
end
关于ruby - 在事件记录范围内映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201123/