0

所以我有 Ninja 模型,它通过 ninja_hovercrafts(存储 ninja_id 和 hovercraft_id)有许多 Hovercrafts。

据我了解,这种排列方式应该设置为关联表只存储足够的信息来绑定两个不同的类。

但我想在我的应用程序中使用关联表作为一个非常简化的授权中心。因此,如果此绑定使忍者成为给定气垫船的飞行员或副驾驶,我还希望此表通过表中的“角色”字段通知我的系统。

我的问题是:

  1. 这丑吗?

  2. 这是正常的吗?

  3. Rails 中是否有内置方法可以帮助我自动创建 Ninjas 和 Hovercrafts 与角色的关联?例如,我是否可以有一个嵌套表单来创建 ninjas 和 hcs 以同时填充 ninjas_hovercrafts 中的角色字段?

  4. 如果以这种方式管理我的应用程序角色不是一个好主意,那么非资源密集型替代方案是什么(我的应用程序旨在避免可伸缩性问题,例如过度连接、包含等)

谢谢你

4

1 回答 1

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来指示它是“飞行员”还是“副驾驶”。

于 2010-04-12T05:12:32.403 回答