开发者

one-many-many assoc find conditions

I've got the following models:

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

So for example: Project.first.title #=> "Manhattan" Project.first.tasks.map(&:name) # => ['Find Scientists', 'Find Money', 'Find Location'] Project.first.tasks.first.users.map(&:full_name) #=> ['James Maxwell', 'Evariste Galois', 'Jules Verne']

My first question is: How ca开发者_运维知识库n I find all the persons' names possibly with symbol to proc in one shot, I tried:

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

Any ideas?

And I think this following question might be in the same ball park:

How can I do a find of Project with conditions that search the 'full_name' attribute of the users its tasks?

Example

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

I think the problem is at the 'tasks.users'.

Thanks everyone, have a happy thanksgiving!


For the first one you'll want to do something like this:

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

The reason for this is that you want to iterate through all the tasks, then all the users in each task. Without the flatten this would give you a 2-dimensional array.

And for the second one your find should be:

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

Writing users.full_name implies to the SQL engine that you're looking for the full_name field on the users table.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜