Ruby on rails Rails 3,使用has_many through和多态性,还是其他什么?

Ruby on rails Rails 3,使用has_many through和多态性,还是其他什么?,ruby-on-rails,ruby-on-rails-3,polymorphism,has-and-belongs-to-many,has-many-through,Ruby On Rails,Ruby On Rails 3,Polymorphism,Has And Belongs To Many,Has Many Through,我有一个无法解决的问题。问题是我有一个用户模型和一个事件模型,在事件模型中,一个用户可以有多个角色。我们还可以添加一个现有用户,或者创建一个可以转换为真实用户的假用户(仅通过数据库中的一个标志) So the diffrent user-type are: A existing user who has created the event (this is a one-to-one relationship) A existing user who is admin for the even

我有一个无法解决的问题。问题是我有一个用户模型和一个事件模型,在事件模型中,一个用户可以有多个角色。我们还可以添加一个现有用户,或者创建一个可以转换为真实用户的假用户(仅通过数据库中的一个标志)

So the diffrent user-type are:
A existing  user who has created the event (this is a one-to-one relationship)
A existing  user who is admin for the event
A existing user who has paid money on the event
A existing user who attended the event
and lastly a person who attended the event but isn't a user yet but has to be shown, so a fake-user would do here..
当我添加参与用户/假用户时,我使用嵌套表单

那么,有人知道如何解决这个问题吗? 我尝试过habtm,有很多:通过多态性和STI,但没有运气。
提前谢谢

你想要一个多habtm的关系,但我认为你不需要它。你不能让这个多态。以下是我的建议设置:

对于事件表列:

  • 身份证
  • 创建者id(FK to users.id)
  • (特定于事件的字段)
保持现有用户表不变

现在,有趣的部分-用户事件表:

  • 身份证
  • 用户id(FK users.id)
  • 事件id(FK events.id)
  • 你是管理员吗?(布尔值)
  • 你有报酬吗?(布尔值)
  • 有人参加吗?(布尔值)

至于处理不存在的参与用户问题-如果您不关心用户的数据,只需在适用的情况下将user_id保留为NULL即可。如果您需要数据,我建议使用您已经建议的布尔标志。

这会使嵌套表单的问题变得有点复杂,如何解决这个问题?(我对尚未成为用户的参与者使用嵌套表单)具有事件接受用户的嵌套属性。然后,我相信关键是事件[user\u attributes][[is\u admin?]等等,但是“is\u admin?”是用户属性吗?这不是一个users\u events\u属性吗?用户是事件的管理员。如果您使用字段,它将为您建立必要的关联