一对多的关联查找条件

时间:2009-11-26 22:11:02

标签: ruby-on-rails activerecord include

我有以下型号:

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)#=> ['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?

示例

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

我认为问题出在'tasks.users'上。

谢谢大家,感恩节快乐!

1 个答案:

答案 0 :(得分: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意味着SQL引擎在full_name表上寻找users字段。