2009-11-26 62 views
0

我有以下型號:一個多對多的assoc命令找到條件

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#=> 「曼哈頓」 Project.first.tasks.map(&:名稱)#=> ['查找科學家','查找錢','查找位置'] Project.first.tasks.first.users.map(&:full_name)#=> ['James Maxwell','Evariste Galois','Jules Verne ']

我的第一個問題是: 我怎樣可以找到所有的人可能與符號的名字在一次機會PROC,我想:

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 

這樣做的原因是,你想通過所有的任務迭代,那麼所有在每個任務的用戶。沒有拼合,這會給你一個二維數組。

而對於第二個你的發現應該是:

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

users.full_name意味着到你要找的usersfull_name領域的SQL引擎。

+0

哦,我明白了,所以我其實不需要做 :conditions => ['tasks.users.full_name喜歡?',查詢],因爲用戶包含允許1)用戶使用排序「獨立」,2)在查詢時適當地限定任務範圍。 搜索項目任務的所有用戶全名可行! - 是否有計算機科學/數學偏好,爲什麼我們可以鏈接多對多的關聯以產生一些「總體」屬性?像 Project.first.tasks.users.map(&:full_name) 我可以想象情況下人們需要這個 謝謝雷達。 Plz認爲案件結案。節日快樂! – 2009-11-27 00:07:43