如何在rails app中为我的用户添加角色?

我有一个简单的应用程序与设计的身份validation系统。 我尝试将角色添加到用户模型中。 但没有任何反应。

我所做的是创建了角色模型并将其链接到用户模型:

$ rails g model Role name:string $ rails g migration addRoleIdToUser role:references $ rake db:migrate 

(按照设计维基的指示)

然后在我的模型中:

 class User < ActiveRecord::Base belongs_to :role end class Role < ActiveRecord::Base has_many :users end 

使用我的角色设置seeds.rb:

 ['seller', 'buyer', 'admin'].each do |role| Role.find_or_create_by({name: role}) end 

然后

 $ rake db:seed 

就这样。 我还想知道如何让用户在注册时选择任何这些角色

首先,您可以在用户类中使用enum ,而不是使用关联:

 class User < ActiveRecord:Base enum role: {seller: 0, buyer: 1, admin: 2} ... end 

您需要迁移才能将role (整数)列添加到用户的表中。

在您的终端:

 rails g migration add_role_to_users 

然后编辑迁移文件:

 class AddRoleToUsers < ActiveRecord::Migration def change add_column :users, :role, :integer end end 

然后你可以使用SimpleForm gem让用户在注册时选择他/她的角色:

 <%= simple_for for @user do |f| %> ... <%= f.select :role, collection: User.roles.keys.to_a %> ... <% end %> 

但SimpleForm对关联也很好:

 <%= f.association :role, as: :radio_buttons %> 

这里有更多关联的例子。

虽然您可以像操作一样为应用程序添加角色。 但是,处理所有类型的角色及其职责需要做很多工作。 此外,还有一些不错的gem,如pundit和cancan ,可用于处理应用程序用户的授权。 它们很容易与您的Rails应用程序集成,并且可以与您已经使用的身份validationgem 设计很好地协作 。

这是一个很好的video教程 ,显示了Pundit的Rails授权。