2009-11-26 3 views
0

У меня есть следующие модели:один-много-много ассоциативный найти условия

project.rb

has_many :tasks 

task.rb

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

пользователь. rb

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

assignment.rb

belongs_to :task 
belongs_to :user 

Так, например: Project.first.title # => "Manhattan" Project.first.tasks.map (&: имя) # => [«Найти ученых», «Найти деньги», «Найти местоположение») Project.first.tasks.first.users.map (&: full_name) # => ['James Maxwell', 'Evariste Galois', 'Jules Verne ']

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

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

Любые идеи?

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

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

Пример

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

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

Спасибо всем, радуйтесь!

ответ

0

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

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

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

А для второго вашей находки должен быть:

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

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

+0

О, я вижу, поэтому мне не нужно было делать : conditions => ['tasks.users.full_name Как?', query], потому что включение пользователей позволяет 1) пользователям использовать сортировку «автономно» и 2) правильно привязанные к задачам при запросе. Выполняется поиск всех полных имен пользователей задач проекта! - Существует ли компьютерная наука/математическое предпочтение относительно того, почему мы можем связать ассоциации «многие ко многим», чтобы дать некоторые «грандиозные» атрибуты? Как Project.first.tasks.users.map (&: full_name) Я могу себе представить сценарии, где люди нуждаются в этом Спасибо Радар. Plz рассматривает случай закрытым. Счастливых праздников! –

Смежные вопросы