使用devise ,拥有多个模型或角色的最佳方式是什么? 以下是我的应用程序中需要的模型或角色:
-Author: can upload content to the site
-Customer: pays a monthly fee to access the content
用户可以同时是作者和客户。我认为他们可以共享相同的登录表单,因为他们都会使用自己的电子邮件地址登录。
我尝试过使用CanCan和 rolify ,但不知道如何在注册过程中添加不同的角色。当用户注册为作者时,他应该被赋予“作者”角色,当用户通过支付月费注册时,他应该被赋予“客户”角色。我也不想对角色使用复选框。
有一个名为“作者”的导航链接,允许作者注册,然后有一个链接供用户通过付款和账单表格进行注册。根据单击的链接,应确定指定的角色。我是否应该在注册期间在 url 中传递角色参数,例如 "user/sign_up/index?role=customer"
?如果是这样,我如何才能在注册过程中使用它?
使用 devise、CanCan 和 rolify,我该如何解决这个问题?我认为最好有一个 User 类,然后让 Customer 和 Author 从 User 扩展,但从阅读 StackOverflow 上的许多类似问题来看,rolify 似乎更容易。
我知道我想做的是非常基本的,我只是还没有弄清楚。我一整天都在努力寻找解决方案。
更新: 下面丹尼的回答将我推向了正确的方向,我通过在 URL“users/sign_up?role=customer”或“users/sign_up?role=author”中传递参数,成功地在注册过程中正确添加了角色。我不知道这是否是最好的方法,但这就是我到目前为止所拥有的。
我的一个问题是我的 has_many 关系现在将如何工作?这是我所拥有的:
class User < ActiveRecord::Base
rolify
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_one :plan
has_many :files
end
has_one :plan is for the customer's subscription plan and has_many :files is for the author who can upload many files that the customer can download
问题是我还想跟踪用户的文件下载,所以我想放置 has_many :downloads
或可能 has_many :files, :through => :downloads
如果我将这些放入用户模型中,知道不允许非客户的作者下载文件并且非作者的客户无法上传文件,这有什么关系吗?
最佳答案
从你的问题中,我了解到你已经“深入”到了 rolify 和 cancan,所以我将专注于分配角色。
您通常会在 seeds.rb 文件中创建不同的角色,例如
[:admin, :author, :customer].each do |role|
Role.find_or_create_by_name({ name: role }, without_protection: true)
end
当您将自己创建为管理员时,也可以在 seeds.rb 文件中使用
立即分配 :admin 角色user.add_role :admin
对于您的其他角色,您可以“在适当的时候”分配它们,正如您所描述的那样。当用户单击作者链接并继续时,这会触发某些 Controller 中的某些操作。您可以通过使用相同的内容将此角色分配给该用户
user.add_role :author
您还可以分配角色,仅连接到某些对象。例如。作者仅是他自己创建的文档的作者。在这种情况下,您不想分配“一般”作者角色,但您将像这样分配它
user.add_role :author, document
在 Controller 的创建操作中,同时保存创建的文档。这种分配的替代方法是在模型的回调中执行此操作。
还有问题吗?就问吧!
关于ruby-on-rails - 如何让设备与多个模型或角色一起工作? (最好使用 CanCan 和 rolify),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071693/