Active Record Rails 3 ассоциации не работают должным образом - PullRequest
0 голосов
/ 23 октября 2010

У меня есть следующие классы с ассоциациями:

class Customer < ActiveRecord::Base
  has_many :orders
  has_many :tickets, :through => :orders
  has_many :technicians, :through => :ticket
  has_many :services, :through => :ticket
end

class Order < ActiveRecord::Base
  belongs_to :customer
  has_many :tickets
  has_many :technicians, :through => :tickets
  has_many :services, :through => :tickets
end  

class Service < ActiveRecord::Base
  has_many :tickets
  has_many :technicians, :through => :tickets
  has_many :orders, :through => :tickets
end  

class Technician < ActiveRecord::Base
  has_many :tickets, :order => 'created_at DESC'
  has_many :services, :through => :tickets
  has_many :orders, :through => :tickets
end  

class Ticket < ActiveRecord::Base
  belongs_to :technician
  belongs_to :service
  belongs_to :order
end  

Я могу сделать:
technician.tickets.service.price

Но я не могу сделать:
customer.orders.technician.name
customer.orders.last.tickets.technician.name

Как перейти от клиента к специалисту или службе?

1 Ответ

1 голос
/ 23 октября 2010

Проблема в том, что вы не можете вызвать свойство для коллекции объектов.

customer.orders.technician.name

Здесь у вас есть коллекция orders.Каждый order может иметь разные technician.Вот почему вы не можете вызвать technician для коллекции.

Решение: вызовите technician для каждого order объекта:

customer.orders.each do |order|
  order.technician.name
end

То же самое для вашего второго примера.Вместо:

customer.orders.last.tickets.technician.name

Использование:

customer.orders.last.tickets.each do |ticket|
  ticket.technician.name
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...