один-много-много ассоциатов найти условия - PullRequest
0 голосов
/ 27 ноября 2009

У меня есть следующие модели:

project.rb

has_many :tasks

task.rb

belongs_to :project
has_many :assignments
has_many :users, :through => :assignments

user.rb

has_many :assignments
has_many :tasks, :through => :assignments

assignment.rb

belongs_to :task
belongs_to :user

Так, например: Project.first.title # => "Манхэттен" Project.first.tasks.map (&: name) # => ['Найти ученых', 'Найти деньги', 'Найти место'] Project.first.tasks.first.users.map (&: full_name) # => ['Джеймс Максвелл', 'Эварист Галуа', 'Жюль Верн']

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

Project.first.tasks.users.full_name #=> AND FAILED Project.first.tasks.map(&:users).full_name #=> AND FAILED Project.first.tasks.map(&:users).map(&:full_name) #=> AND FAILED

Есть идеи?

И я думаю, что следующий вопрос может быть в том же парке:

Как мне найти проект с условиями, которые выполняют поиск атрибута «полное_имя» пользователей по его задачам?

* ** 1042 тысяча сорок-один * Пример

Project.all(:include => {:tasks => :users}, :conditions => ['tasks.users.full_name LIKE ?', query]) #this failed

Я думаю, что проблема в 'tasks.users'.

Спасибо всем, счастливого дня благодарения!

1 Ответ

0 голосов
/ 27 ноября 2009

Для первого вы захотите сделать что-то вроде этого:

Project.first.tasks.map { |t| t.users.map(&:full_name) }.flatten

Причина этого в том, что вы хотите выполнить итерацию по всем задачам, а затем по всем пользователям в каждой задаче. Без сглаживания это даст вам двумерный массив.

А для второго вы должны найти:

Project.all(:include => {:tasks => :users}, :conditions => ['users.full_name LIKE ?', query])

Запись users.full_name подразумевает для механизма SQL, что вы ищете поле full_name в таблице users.

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