Ruby on Rails: критерии именованных областей действия Activerecord для вопроса о вложенной модели - PullRequest
0 голосов
/ 29 июня 2011

У меня есть следующие таблицы (показаны только первичные и внешние ключи вместе с именем в таблице udds):

employee    appointment    appointment_udds    udds
--------    -----------    ----------------    ----
id          id             id                  id
            employee_id    appointment_id      name
                           udds_id

Я устанавливаю отношения в моделях следующим образом:

employee.rb

has_many :appointments, :dependent => :destroy

appointment.rb

has_many :appointment_uddss, :dependent => destroy
belongs_to :employee

appointment_udds.rb

belongs_to :appointment
belongs_to :udds

udds.rb

has_many :appointment_uddss

Итак, я работаю в основном с моделью Employee, и я пытался создать именованную область в своей модели, чтобы получить все записи с ненулевым именем udds, например:

employee.rb

named_scope :with_udds, :include => :uddss, :conditions => "udds.name IS NOT NULL"

Я надеялся позвонить Employee.with_udds , чтобы получить всех сотрудников, у которых есть поле с ненулевым именем для их коэффициентов. Являются ли эти отношения слишком сложными для ActiveRecord или я поступаю неправильно?


Я попытался расширить связь до таблицы udds в классе сотрудников:

class Employee < ActiveRecord::Base
  acts_as_audited
  has_many :appointments, :dependent => :destroy
  has_many :appointment_uddss, :through => :appointments
  has_many :uddss, :through => :appointment_uddss

  named_scope :with_udds, :include => :uddss, :conditions => "udds.name IS NOT NULL"

Затем в консоли:

Employee.with_udds

возвращает пустой набор (в БД есть данные, где udds.name! = Null)

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Попробуйте это:

class Employee < ActiveRecord::Base
  acts_as_audited
  has_many :appointments, :dependent => :destroy
  has_many :appointment_uddss, :through => :appointments
  has_many :uddss, :through => :appointment_uddss

  scope :with_udds, where("udds.name IS NOT NULL").includes(:udds)
end
0 голосов
/ 29 июня 2011

Выложите включенные явно:

:include => { :appointments => { :appointment_uddss => :uddss } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...