Ruby on rails Rails4-设计-用户可以生成合作伙伴,合作伙伴是用户类
我正在使用rails 4并设计身份验证 用户注册只需要电子邮件,然后,在电子邮件验证后,询问要填写的用户名、姓氏、姓氏和密码 用户拥有团队,可以在其中添加合作伙伴 合作伙伴是用户类,因为它们共享相同的属性 这是一个非常简单的逻辑,但由于Desive只做很多操作,我想知道这是否是正确的做法,我的意思是为用户和合作伙伴共享用户模型,而不是为每个人都提供专用模型 举个例子,我脑子里有这些敏感的东西: 我如何“自动激活”我的合作伙伴,即覆盖设计激活过程? -->合作伙伴将立即在应用程序中可见 -->显然,合作伙伴不允许登录 后面的逻辑: 稍后,如果用户尝试注册,并且其电子邮件已存在于数据库中,则会: -->检查用户状态 ---->如果是合作伙伴,则创建状态为“用户”的新帐户 ---->如果是用户,则会通过电子邮件发送密码提醒 有关逻辑的更多信息 团队所有者(=注册用户)的用户将具有“用户”状态 被称为合作伙伴的用户将具有“合作伙伴”的状态,但它们来自用户类 这样说来,一个用户将能够创建多个合作伙伴,这些合作伙伴可能有相同的电子邮件(比如说他们不在同一个团队中)。 我可以用find或create解决这个复制问题,因为所有合作伙伴都是由同一个用户创建的 现在,假设许多用户都有共同的合作伙伴。用户1创建partner@gmail.com,和User2创建partner@gmail.com 在这里,Desive将行使否决权并阻止创建 为什么我要为每个人保留伴侣,为什么我要保留伴侣 具有相同电子邮件的合作伙伴和用户 -->合作伙伴拥有个人资料。我希望用户能够创建个人资料,他想要的合作伙伴(化身等) -->合作伙伴可以在不同的团队中使用不同的配置文件职业(例如quaterback或类似的职业),因此每个用户都可以为一个独特的应用程序创建自己的配置文件partner@email.com -->如果用户注册(成为所有者,类似于官方档案),并且作为少数团队的合作伙伴出现,那么团队的所有者将被要求将档案从他创建的档案切换到“官方档案” 我同意,这有点复杂 现在,我将“所有者”状态存储在用户模型中的一个专用行中。 对于卡和合作伙伴之间的多对多关系,我有一个联接表。 这样,如果用户请求,我可以轻松地用新的“官方配置文件”id更新partner_id,然后删除用户模型中“非官方”配置文件的行 我的问题实际上是设计角色身份验证来阻止合作伙伴登录尝试(这是下面回答的部分)和电子邮件的唯一性 我希望我的解释清楚,我为我的英语不好道歉 事先非常感谢Ruby on rails Rails4-设计-用户可以生成合作伙伴,合作伙伴是用户类,ruby-on-rails,ruby-on-rails-4,devise,polymorphism,Ruby On Rails,Ruby On Rails 4,Devise,Polymorphism,我正在使用rails 4并设计身份验证 用户注册只需要电子邮件,然后,在电子邮件验证后,询问要填写的用户名、姓氏、姓氏和密码 用户拥有团队,可以在其中添加合作伙伴 合作伙伴是用户类,因为它们共享相同的属性 这是一个非常简单的逻辑,但由于Desive只做很多操作,我想知道这是否是正确的做法,我的意思是为用户和合作伙伴共享用户模型,而不是为每个人都提供专用模型 举个例子,我脑子里有这些敏感的东西: 我如何“自动激活”我的合作伙伴,即覆盖设计激活过程? -->合作伙伴将立即在应用程序中可见 -->显然
你在这里提到的方法很好。在同一用户表中可以有合作伙伴和用户。据我所知,
用户有许多团队,团队属于用户
。用户将是团队中的所有者或合作伙伴
所以,当用户添加合作伙伴时,只需创建一个方法来处理用户创建。还有一个包含用户id、团队id和用户角色(用户或合作伙伴)的表
假设使用的数据库是sql
class Team < ActiveRecord::Base
has_many :teams_users
has_many :users, :through => :team_users
end
class TeamUsers < ActiveRecord::Base
belongs_to :team
belongs_to :user
end
class User < ActiveRecord::Base
has_many :teams_users
has_many :teams, :through => :teams_users
end
class团队:团队用户
结束
类TeamUsers:teams\u用户
结束
Desive需要密码,因此您可以从服务器端设置密码和密码确认。不要向用户发送邮件,因为您希望避免默认的Desive身份验证方式。Desive在用户属性中存储已确认的_at,该属性在用户单击确认链接时设置时间戳<代码>在更新此已确认的\u
从后端直接添加用户,或者根据您的要求。注册合作伙伴的电子邮件id、设置密码并确认可用后,合作伙伴帐户即处于活动状态
让我们看看第二部分,当用户尝试以合作伙伴或用户身份注册/登录时。要处理此问题,请更改用户的登录行为。当用户尝试注册时,从users\u team表继承Desive Controller并检查用户角色。有一个更清楚的想法,如果用户在两个不同的团队中有两个角色,将会让人困惑
此外,即使用户状态为partner,也不应创建新帐户,因为Desive默认情况下认为电子邮件id是唯一的,并且用户对象已创建,除非您尝试更改此设置。在这两种情况下发送密码提醒看起来都不错,但您仍可以根据应用程序的需要使用该功能。非常感谢您提供的所有这些信息,这非常有帮助。我将在问题(为了可读性)中添加有关完全使用此双重配置文件的信息,因为在我假设的逻辑中,电子邮件似乎不是唯一的。根据您的更新,我觉得需要两个模型来保持事情的独立性,并避免不必要的逻辑。