2016-05-11 6 views
0

Ich verwende Rails 4.2.3. Ich möchte Rollen zu meinen Benutzern zuweisen, damit ich diese habe in meiner app/Modell/users.rb Datei ...Probleme beim Umleiten in Rails, wenn mein Benutzer eine bestimmte Rolle hat

class User < ActiveRecord::Base 
    has_many :assignments 
    has_many :roles, through: :assignments 

    def role?(role) 
    roles.any? { |r| r.name.underscore.to_sym == role } 
    end 

    def admin? 
    role? "Admin" 
    end 
end 

aber wenn ich mit dem einzigen Benutzer in meinem System anmelden, bin ich nicht auf dem umgeleitet Admin-Seite (statt der „else“ Klausel der unten ausgeführt wird ...

def create 
    user = User.from_omniauth(env["omniauth.auth"]) 
    session[:user_id] = user.id 
    if user.admin? 
     render 'admin/index' 
    else 
     redirect_to root_path 
    end 
end 

ich kann nicht herausfinden, warum das so ist. im folgenden sind die Daten nur noch in meiner PostGres Datenbank ...

myproject=> select * FROM Assignments; 
id | user_id | role_id |   created_at   |   updated_at   
----+---------+---------+----------------------------+---------------------------- 
    4 |  8 |  1 | 2016-05-10 21:15:01.863456 | 2016-05-10 21:15:01.863456 
(1 row) 

myproject=> select * FROM users; 
id | provider |   uid   |  name  | oauth_token | oauth_expires_at |   created_at   |   updated_at   |   email   
----+---------------+-----------------------+---------------+-------------+------------------+----------------------------+----------------------------+------------------------- 
    8 | google_oauth2 | 177611649021871409999 | Dave A  |    |     | 2016-05-10 21:15:01.861259 | 2016-05-10 21:15:01.861259 | [email protected] 
(1 row) 

myproject=> select * FROM roles; 
id | name |   created_at   |   updated_at   
----+-------+----------------------------+---------------------------- 
    1 | Admin | 2016-04-28 19:55:43.473016 | 2016-04-28 19:55:43.473016 
    2 | User | 2016-04-28 19:55:43.492222 | 2016-04-28 19:55:43.492222 

Antwort

0

Sie übergeben eine Zeichenfolge "Adm in "zu role? aber in dem Block, der an roles.any? übergeben wird, passen Sie auf einem Symbol an. Dies sollte funktionieren:

def role?(role) 
    roles.any? { |r| r.name.underscore.to_sym == role.to_s.underscore.to_sym } 
end 

damit Sie "Admin", "admin" oder :admin-role?

passieren kann
Verwandte Themen