2009-11-26 60 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