使用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 用于客户的订阅计划, has_many :files 用于可以上传许多客户可以下载的文件的作者
问题是我还想跟踪用户的文件下载,所以我想放has_many :downloads
或者可能has_many :files, :through => :downloads
如果我将这些放在 User 模型中,并且知道不允许非客户的作者下载文件并且非作者的客户不能上传文件,这是否重要?