0

Итак, у меня есть модель ниндзя, у которой есть много кораблей на воздушной подушке через ninja_hovercrafts (где хранятся ninja_id и hovercraft_id).Рельсы + простая система ролей через ассоциативную таблицу

Насколько я понимаю, такое устройство должно быть установлено таким образом, чтобы ассоциативная таблица хранила достаточно информации для привязки двух разных классов.

Но я бы хотел использовать ассоциативную таблицу для работы в качестве очень упрощенного центра авторизации в моем приложении. Поэтому мне также хотелось бы, чтобы эта таблица сообщала мою систему, если это связывание делает ниндзя пилотом или совместным пилотом данного судна на воздушной подушке через поле «роль» в таблице.

Мои вопросы:

  1. Является ли это некрасиво?

  2. Это нормально?

  3. Есть ли методы, встроенные в рельсы, которые помогут мне автоматически создавать ассоциации ниндзя и судовых кораблей С ролью? Например, могу ли я иметь вложенную форму для создания как ниндзя, так и hcs таким образом, чтобы также было заполнено поле роли в ninjas_hovercrafts?

  4. Если управление моими ролями приложений таким образом, это не очень хорошая идея, Что тяжелая альтернатива без ресурсов (мое приложение проектируются пытается избежать проблем масштабируемости, такие как чрезмерное соединения, включает в себя, и т.д.)

спасибо

+0

Возможно, это вопрос, где нет правильного или неправильного ответа. Какой-то вопрос люди боялись тратить свое время на разработку, рискуя быть пониженным ... c'mon, ребята! :) – user202411

ответ

0

Это не может ответить вам вопрос полностью, но если вы только собираетесь иметь две роли для СВП я бы вместо этого созданы ассоциации, как этот

class Hovercraft < ActiveRecord::Base 
    belongs_to :pilot, :class_name => 'Ninja', :foreign_key => 'pilot_id' 
    belongs_to :copilot, :class_name => 'Ninja', :foreign_key => 'copilot_id' 
end 

class Ninja < ActiveRecord::Base 
    has_many :pilotings, :class_name => 'Hovercraft', :foreign_key => 'pilot_id' 
    has_many :copilotings, :class_name => 'Hovercraft', :foreign_key => 'copilot_id' 
end 

Теперь, если у вас есть больше ролей, или если вам нужна большая гибкость, вы можете использовать третью модель для их объединения.

class Hovercraft < ActiveRecord::Base 
    has_many :hovercraft_roles 
    has_many :ninjas, :through => :hovercraft_roles 
end 

class HovercraftRole < ActiveRecord::Base 
    belongs_to :hovercraft 
    belongs_to :ninja 
end 

class Ninja < ActiveRecord::Base 
    has_many :hovercraft_roles 
    has_many :hovercrafts, :through => :hovercraft_roles 
end 

С атрибутом роли в HovercraftRole модели к указывается, если это «пилот» или «штурман».

Смежные вопросы