gpt4 book ai didi

ruby-on-rails - 编写多行 ActiveRelation 查询的惯用方法是什么?

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

我的应用程序中有许多多行 ActiveRelation 查询方法,我不确定编写这些方法的最惯用方式。看看这个例子:

def postal_code_ids_within(miles)
nearby_postal_codes = PostalCode.where("latitude > :min_lat and latitude < :max_lat",
min_lat: (latitude - (miles.to_f / MILES_PER_DEGREE_LATITUDE.to_f / 2.to_f)),
max_lat: (latitude + (miles.to_f / MILES_PER_DEGREE_LATITUDE.to_f / 2.to_f)))
nearby_postal_codes = nearby_postal_codes.where("longitude > :min_lon and longitude < :max_lon",
min_lon: (longitude - (miles.to_f / MILES_PER_DEGREE_LONGITUDE.to_f / 2.to_f)),
max_lon: (longitude + (miles.to_f / MILES_PER_DEGREE_LONGITUDE.to_f / 2.to_f)))
nearby_postal_codes.pluck(:id)
end

我觉得有点不对劲。从中返回 ActiveRelation 对象的 block 似乎是惯用的,但我还没有看到这种方法。

什么是标准?

最佳答案

根据 Brian 的建议,这更易读并且效果很好。

scope :near, lambda { |postal_code, miles|
degree_offset = miles / MILES_PER_DEGREE / 2
where("latitude > :min_lat and latitude < :max_lat and longitude > :min_lon and longitude < :max_lon",
min_lat: postal_code.latitude - degree_offset,
max_lat: postal_code.latitude + degree_offset,
min_lon: postal_code.longitude - degree_offset,
max_lon: postal_code.longitude + degree_offset)
}

def postal_code_ids_within(miles)
self.class.near(self, miles).pluck(:id)
end

关于ruby-on-rails - 编写多行 ActiveRelation 查询的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12040481/

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