Nano Hash - криптовалюты, майнинг, программирование

Rails: найти с моделью соединения — как?

У меня есть следующие ассоциации моделей, которые я хочу использовать для поиска игроков:

class Player < ActiveRecord::Base
 belongs_to :user
 has_many :abilities
 has_many :sports, :through => :abilities
 ...
end

class User < ActiveRecord::Base
  has_one :player
...
end

class Ability < ActiveRecord::Base
  belongs_to :player
  belongs_to :sport
  has_one :level
  ...
end

class Sport < ActiveRecord::Base
  has_and_belongs_to_many :category_sports 

  has_many :abilities
  has_many :players, :through => :abilities
  ...
end

class CategorySport < ActiveRecord::Base
 has_and_belongs_to_many :sports 
end

У меня есть форма, в которой пользователь может заполнить два поля: город и спорт.

Поле города находится в модели пользователя как (@user.city), а поле спорта может быть либо в модели CategorySport как (@category_sport.name), либо в модели Sport как (@sport.name).

Прямо сейчас у меня есть следующее для выполнения поиска в модели Player:

def search
  self.find(:all,:include => 'user',:conditions => ['users.city LIKE ?', "%#{city}%"])
end

Я хотел бы знать, как бы я добавил модель соединения (способность) и связанную с ней (спорт, категории, спорт) в этом запросе, чтобы найти и по спорту. Так что не только по городу пользователя, но и по виду спорта.


Ответы:


1

Попробуй это:

def search
  self.includes(:user, :abilities => {:sport => :category_sports}).
    where(['users.city LIKE ? OR category_sports.name=? OR sports.name=?', 
      "%#{city}%", sport, sport])
end
11.07.2012
  • Это не работает. Если город не похож ни на одну из записей, он ничего не возвращает... 13.07.2012
  • Вы имеете в виду, что вы получаете неправильные результаты ТОЛЬКО тогда, когда в users нет совпадений? Это странно. Могу ли я увидеть сгенерированный SQL? 13.07.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..