I have a simple app with an authentication system from devise. I tried adding roles to the user model. But nothing happens.
what i did was created the Role model and link it to the User Model:
$ rails g model Role name:string
$ rails g migration addRoleIdToUser role:references
$ rake db:migrate
(as directed by the devise wiki)
Then in my Models:
class User < ActiveRecord::Base
belongs_to :role
end
class Role < ActiveRecord::Base
has_many :users
end
Set up seeds.rb with my roles:
['seller', 'buyer', 'admin'].each do |role|
Role.find_or_create_by({name: role})
end
Then
$ rake db:seed
That's all. And I also want to know how to make the user chose any of these roles at the time of signup
While you can add roles to your application like the way you did. But, it would be a lot of work to handle all types of roles and their responsibilities. Also, There are several nice gems like pundit and cancan which can be used to handle the authorization for your application users. They're very easy to integrate with your Rails application and works nicely with authentication gem devise which you are already using.
Here is a nice video tutorial which shows Rails Authorization with Pundit.
First of all, instead of using an association, you can use
enum
in your user class:You'll need a migration to add a
role
(integer) column into your user's table.In your terminal:
Then edit the migration file:
Then you can e.g. use the
SimpleForm
gem to let the user choose his/her role during sign up:But SimpleForm is also good with associations:
There are more examples for associations here.