Rails возможна проблема с полиморфной ассоциацией has_many - PullRequest
0 голосов
/ 14 декабря 2018

В моей заявке у меня есть следующие модели:

Пользователь

Психолог has_many классы

Учитель имеет множество ученических классов

Родитель имеет много детей

Директор принадлежит школе

Координатор принадлежит школе

Моя пользовательская модель выглядит следующим образом:

class User < ActiveRecord
   has_many :roles

   def has_role? role_name
     self.roles.where(role_type: role_name).any?
   end
end

Ролевая модель является полиморфной:

class Role < ApplicationRecord
  belongs_to :user
  belongs_to :roleable, polymorphic: true
end

А другие модели являются раскладными.

Мой вопрос заключается в следующем, кажется, что это не правильно, потому что некоторые модели, такие как: директор, психологи, учителя, координатор и родитель.У них есть только связи, и в их таблицах базы данных нет других столбцов, кроме create_at , updated_at .

Можно ли создавать эти модели только со связями и иметь ихтаблицы без данных?

1 Ответ

0 голосов
/ 14 декабря 2018

Возможно, вы намереваетесь использовать наследование одной таблицы , а не полиморфные отношения .Если Psychologist - это User, то так и должно быть.

Затем вам нужно добавить столбец type типа VARCHAR в таблицу пользователей и настроить ваши модели следующим образом:

class User < ApplicationRecord
  has_many :roles

  def has_role? role_name
    self.roles.where(role_type: role_name).any?
  end
end

class Psychologist < User
  # no need to set up roles
end

class Teacher < User
  # no need to set up roles
end

class Role < ApplicationRecord
  belongs_to :user
  # no polymorphic
end

Столбец type будет заполнен именем фактического класса, например "Teacher" и т. Д.

Поскольку экземпляр Teacher также является экземпляром User, он будет иметь teacher.has_role?('foo') и teacher.roles, и вы сможете создать роль, подобную Role.create(user: teacher, name: 'bar').

...