Ahm*_*eza 7 authorization roles ruby-on-rails devise
我有一个简单的应用程序与设计的身份验证系统.我尝试将角色添加到用户模型中.但没有任何反应.
我做了什么 创建了角色模型并将其链接到用户模型:
$ rails g model Role name:string
$ rails g migration addRoleIdToUser role:references
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
(按照设计维基的指示)
然后在我的模型中:
class User < ActiveRecord::Base
belongs_to :role
end
class Role < ActiveRecord::Base
has_many :users
end
Run Code Online (Sandbox Code Playgroud)
使用我的角色设置seeds.rb:
['seller', 'buyer', 'admin'].each do |role|
Role.find_or_create_by({name: role})
end
Run Code Online (Sandbox Code Playgroud)
然后
$ rake db:seed
Run Code Online (Sandbox Code Playgroud)
就这样.我还想知道如何让用户在注册时选择任何这些角色
Fei*_*Fei 14
首先,您可以enum在您的用户类中使用,而不是使用关联:
class User < ActiveRecord:Base
enum role: {seller: 0, buyer: 1, admin: 2}
...
end
Run Code Online (Sandbox Code Playgroud)
您需要迁移才能将role(整数)列添加到用户的表中.
在您的终端:
rails g migration add_role_to_users
Run Code Online (Sandbox Code Playgroud)
然后编辑迁移文件:
class AddRoleToUsers < ActiveRecord::Migration
def change
add_column :users, :role, :integer
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以使用SimpleFormgem来让用户在注册时选择他/她的角色:
<%= simple_for for @user do |f| %>
...
<%= f.select :role, collection: User.roles.keys.to_a %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
但SimpleForm对关联也很好:
<%= f.association :role, as: :radio_buttons %>
Run Code Online (Sandbox Code Playgroud)
有消协更多的例子在这里.