Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails4-设计-用户可以生成合作伙伴,合作伙伴是用户类_Ruby On Rails_Ruby On Rails 4_Devise_Polymorphism - Fatal编程技术网

Ruby on rails Rails4-设计-用户可以生成合作伙伴,合作伙伴是用户类

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只做很多操作,我想知道这是否是正确的做法,我的意思是为用户和合作伙伴共享用户模型,而不是为每个人都提供专用模型 举个例子,我脑子里有这些敏感的东西: 我如何“自动激活”我的合作伙伴,即覆盖设计激活过程? -->合作伙伴将立即在应用程序中可见 -->显然

我正在使用rails 4并设计身份验证

用户注册只需要电子邮件,然后,在电子邮件验证后,询问要填写的用户名、姓氏、姓氏和密码

用户拥有团队,可以在其中添加合作伙伴

合作伙伴是用户类,因为它们共享相同的属性

这是一个非常简单的逻辑,但由于Desive只做很多操作,我想知道这是否是正确的做法,我的意思是为用户和合作伙伴共享用户模型,而不是为每个人都提供专用模型

举个例子,我脑子里有这些敏感的东西:

我如何“自动激活”我的合作伙伴,即覆盖设计激活过程?

-->合作伙伴将立即在应用程序中可见

-->显然,合作伙伴不允许登录

后面的逻辑:

稍后,如果用户尝试注册,并且其电子邮件已存在于数据库中,则会:

-->检查用户状态

---->如果是合作伙伴,则创建状态为“用户”的新帐户

---->如果是用户,则会通过电子邮件发送密码提醒

有关逻辑的更多信息

团队所有者(=注册用户)的用户将具有“用户”状态 被称为合作伙伴的用户将具有“合作伙伴”的状态,但它们来自用户类

这样说来,一个用户将能够创建多个合作伙伴,这些合作伙伴可能有相同的电子邮件(比如说他们不在同一个团队中)。 我可以用find或create解决这个复制问题,因为所有合作伙伴都是由同一个用户创建的

现在,假设许多用户都有共同的合作伙伴。用户1创建partner@gmail.com,和User2创建partner@gmail.com 在这里,Desive将行使否决权并阻止创建

为什么我要为每个人保留伴侣,为什么我要保留伴侣 具有相同电子邮件的合作伙伴和用户

-->合作伙伴拥有个人资料。我希望用户能够创建个人资料,他想要的合作伙伴(化身等)

-->合作伙伴可以在不同的团队中使用不同的配置文件职业(例如quaterback或类似的职业),因此每个用户都可以为一个独特的应用程序创建自己的配置文件partner@email.com

-->如果用户注册(成为所有者,类似于官方档案),并且作为少数团队的合作伙伴出现,那么团队的所有者将被要求将档案从他创建的档案切换到“官方档案”

我同意,这有点复杂

现在,我将“所有者”状态存储在用户模型中的一个专用行中。 对于卡和合作伙伴之间的多对多关系,我有一个联接表。 这样,如果用户请求,我可以轻松地用新的“官方配置文件”id更新partner_id,然后删除用户模型中“非官方”配置文件的行

我的问题实际上是设计角色身份验证来阻止合作伙伴登录尝试(这是下面回答的部分)和电子邮件的唯一性

我希望我的解释清楚,我为我的英语不好道歉

事先非常感谢


你在这里提到的方法很好。在同一用户表中可以有合作伙伴和用户。据我所知,
用户有许多团队,团队属于用户
。用户将是团队中的所有者或合作伙伴

所以,当用户添加合作伙伴时,只需创建一个方法来处理用户创建。还有一个包含用户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是唯一的,并且用户对象已创建,除非您尝试更改此设置。在这两种情况下发送密码提醒看起来都不错,但您仍可以根据应用程序的需要使用该功能。

非常感谢您提供的所有这些信息,这非常有帮助。我将在问题(为了可读性)中添加有关完全使用此双重配置文件的信息,因为在我假设的逻辑中,电子邮件似乎不是唯一的。根据您的更新,我觉得需要两个模型来保持事情的独立性,并避免不必要的逻辑。