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将用户界面限制为与角色“相关”的部分,一切都很好。你能正式接受我对你上一个问题的回答吗?谢谢