Rails 3 Присоединяйтесь к вопросу - PullRequest
1 голос
/ 19 марта 2011

Привет, у меня есть пользовательская модель, модель обнаруженных_объектов и модель boss_locations.

Расположение_босса - это статическое представление местоположения босса.Обнаруженное местоположение - (user_id, boss_location_id).

Каков хороший способ (даже лучше, если охватывается область, я предполагаю), чтобы объединить местоположения босса пользователя и обнаруженные местоположения?

То есть я хочу присоединиться к локациям боссов.Я хочу, чтобы все местоположения боссов были либо обнаружены, либо нет, но я также хочу знать, если они обнаружены.

Как бы вы это сделали?

1 Ответ

2 голосов
/ 19 марта 2011

Простой и эффективный способ - добавить counter_cache к отношению boss_location / found_location.Таким образом, вы можете запросить без объединений и получить те же результаты:

class BossLocation < ActiveRecord::Base
  has_many :discovered_locations

  scope :discovered, where(["#{quoted_table_name}.discovered_locations_count > ?", 0])
  scope :undiscovered, where(["#{quoted_table_name}.discovered_locations_count = ?", 0])

  def discovered?
    self.discovered_locations_count > 0
  end
end

class DiscoveredLocation < ActiveRecord::Base
  belongs_to :user
  belongs_to :boss_location, :counter_cache => true
end

Если вы хотите придерживаться маршрута объединения, вам нужно будет сделать что-то вроде этого:LOJ сохранит все записи, но count () в выборе даст вам желаемый флаг состояния.Надеюсь, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...