Есть ли более элегантный способ написать это в рубине? - PullRequest
0 голосов
/ 05 августа 2011
class Geolocation < ActiveRecord::Base
  scope :lat_greater_than_or_equal_to, lambda { |lat| where("latitude >= ?", lat) }
  scope :lat_less_than_or_equal_to,    lambda { |lat| where("latitude <= ?", lat) }
  scope :lng_greater_than_or_equal_to, lambda { |lng| where("longitude >= ?", lng) }
  scope :lng_less_than_or_equal_to,    lambda { |lng| where("longitude <= ?", lng) }
end

Итак, я делаю:

Geolocation.lat_greater_than_or_equal_to(lat_min).
            lat_less_than_or_equal_to(lat_max).
            lng_greater_than_or_equal_to(lng_min).
            lng_less_than_or_equal_to(lng_max)

Не то чтобы это ужасно , но мне было интересно, есть ли лучший способ?

1 Ответ

3 голосов
/ 05 августа 2011

Эффективно, что вы хотите, это переплетная коробка, которая нуждается в четырех углах.Таким образом, другой способ написать это может быть:

class Geolocation < ActiveRecord::Base
  scope :binding_box, lambda { |lat_min, lng_max, lat_max, lng_min| where(
      "latitude >= ? AND latitude <= ? AND longitude >= ? AND longitude <= ?", 
      lat_min, lat_max, lng_min, lng_max
  )}
end

Geolocation.binding_box(lat_min, lng_max, lat_max, lng_min)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...