Pergunta

Eu tenho os seguintes modelos:

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

Assim, por exemplo: Project.first.title # => "Manhattan" Project.first.tasks.map (&: nome) # => [ 'Encontre cientistas', 'Encontrar Money', 'encontrar a localização'] Project.first.tasks.first.users.map (&: full_name) # => [ 'James Maxwell', 'Evariste Galois', 'Jules Verne']

Minha primeira pergunta é: Como posso encontrar nomes de todos os pessoas possivelmente com símbolo para proc em um tiro, eu tentei:

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

Todas as idéias?

E eu acho que isso seguinte pergunta pode estar no mesmo parque de bola:

Como posso fazer um achado de projeto com condições que buscam o atributo 'full_name' dos usuários suas tarefas?

Exemplo

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

Eu acho que o problema é no 'tasks.users'.

Obrigado a todos, tem uma acção de graças feliz!

Foi útil?

Solução

Para o primeiro que você vai querer fazer algo como isto:

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

A razão para isso é que você quer para percorrer todas as tarefas, então todos os usuários em cada tarefa. Sem a achatar isso iria dar-lhe uma matriz de 2 dimensões.

E para o segundo seu achado deve ser:

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

Escrevendo users.full_name implica para o motor de SQL que você está procurando o campo full_name na mesa de users.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top