Ruby on rails 如何让Desive与多个模型或角色协同工作?(最好使用CanCan和rolify)

Ruby on rails 如何让Desive与多个模型或角色协同工作?(最好使用CanCan和rolify),ruby-on-rails,devise,cancan,rolify,Ruby On Rails,Devise,Cancan,Rolify,使用,拥有多个模型或角色的最佳方式是什么? 以下是我在应用程序中需要的模型或角色: -Author: can upload content to the site -Customer: pays a monthly fee to access the content 用户既可以是作者,也可以是客户。我认为他们可以共享相同的登录表单,因为他们都将使用自己的电子邮件地址登录 我尝试过使用和,但不知道如何在注册期间添加不同的角色。当用户注册为作者时,应授予其“作者”角色;当用户通过支付月费注册时,应

使用,拥有多个模型或角色的最佳方式是什么? 以下是我在应用程序中需要的模型或角色:

-Author: can upload content to the site
-Customer: pays a monthly fee to access the content
用户既可以是作者,也可以是客户。我认为他们可以共享相同的登录表单,因为他们都将使用自己的电子邮件地址登录

我尝试过使用和,但不知道如何在注册期间添加不同的角色。当用户注册为作者时,应授予其“作者”角色;当用户通过支付月费注册时,应授予其“客户”角色。我也不想对角色使用复选框

有一个名为“Authors”的导航链接,允许作者注册,然后有一个链接供用户通过支付和账单表单注册。应根据单击的链接确定指定的角色。我是否应该在注册期间在url中传递角色参数,如
“user/sign\u up/index?role=customer”
?如果是,我如何让Desive在注册过程中使用此功能

使用Desive、CanCan和rolify,我如何解决这个问题?我认为最好有一个User类,然后让Customer和Author从User扩展,但从阅读StackOverflow上的许多类似问题来看,rolify似乎更容易

我知道我要做的是非常基本的,我只是还没弄明白。我一整天都在想办法解决这个问题

更新: Danny在下面的回答将我推向了正确的方向,我通过在URL“users/sign\u-up?role=customer”或“users/sign\u-role=author”中传递一个参数,成功地在注册过程中正确添加了角色。我不知道这是否是最好的方法,但这就是我目前所拥有的

但我有一个问题,那就是我的许多关系现在将如何运作?以下是我所拥有的:

class User < ActiveRecord::Base
    rolify
    devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

    has_one :plan
    has_many :files

end
class用户
has_one:计划是针对客户的订阅计划 而且有很多:文件 是为作者谁可以上传许多文件,客户可以 下载

问题是我还想跟踪用户的文件下载,所以我想把
有很多:下载
或者可能
有很多:文件,:通过=>:下载


如果我在知道非客户的作者不允许下载文件、非作者的客户不能上传文件的情况下将这些文件放入用户模型中,这有关系吗?

从您的问题中,我了解到您已经“分入”rolify和cancan,因此我将重点关注角色分配

通常在seeds.rb文件中创建不同的角色,例如

[:admin, :author, :customer].each do |role|
  Role.find_or_create_by_name({ name: role }, without_protection: true)
end
当您将自己创建为管理员时,也可以在seeds.rb文件中使用

user.add_role :admin
对于您的其他角色,您可以“在适当的时候”完全按照您所描述的方式分配它们。当用户单击Authors链接并继续时,这会在某个控制器中触发某些操作。在那里,您可以使用相同的方法将此角色分配给该用户

user.add_role :author
您还可以分配角色,仅连接到某些对象。作者只是他自己创作的文件的作者。在这种情况下,您不希望分配“常规”作者角色,但您将像这样分配它

user.add_role :author, document
在控制器的创建操作中,同时保存创建的文档。这种赋值的替代方法是在模型的回调中进行


还有问题吗?问吧

乍一看,您可能会说“这是纯粹的多态性”,但看到用户既可以是作者也可以是客户这一事实,就没有太多的选择了。只要您使用CanCan将用户界面限制为与角色“相关”的部分,一切都很好。你能正式接受我对你上一个问题的回答吗?谢谢