2017-09-17 1 views
-1

Je suis encore novice dans Ruby et spécifiquement Rails et j'apprends toujours à faire les choses correctement d'une manière sur rails. donc je User classe comme ci-dessousRequêtes ActiveRecord personnalisées pour un utilisateur spécifique (par exemple Admin)

class User < ApplicationRecord 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

    validates :email, presence: true, email: true 

    has_many :user_program_roles, dependent: :destroy 
    has_many :programs, through: :user_program_roles 
    has_many :user_answers 
    has_many :homework_students 
    ... 
    ... 
end 

De classe ci-dessous, je comprends que, pour obtenir un program, user doit exister dans user_program_roles. Ma question est, est-il un moyen que je peux aller chercher tous les programmes sans que l'utilisateur doive être dans user_program_roles (par exemple je suis Admin et je veux voir tous les programmes). Quel est le meilleur moyen d'y parvenir de façon ferroviaire?

Update

Alors atm dans l'application, je peux avoir quelque chose comme ça current_user.programs et il va chercher tous les programmes si le current_user a record user_program_roles. Puis-je obtenir semblable à cela, je ne sais pas si je peux faire quelque chose comme ça dans le rubis (à l'intérieur User classe)

def programs 
    if admin? 
    Program.all # return all program if this user is admin 
    else 
    programs # return only program that this user has role in it 
    end 
end 
+0

Vos déclarations sont déjà correctes. Pour obtenir tous les programmes, il suffit d'utiliser 'Program.all'. L'utilisateur existe uniquement dans 'user_program_roles' si l'utilisateur est associé à un programme. – vee

+0

J'ai mis à jour ma question, avec ce que j'essaie d'accomplir. Mais ce code n'a pas fonctionné. Est-il possible d'écraser la méthode ActiveRecord? –

Répondre

0

je figure dehors ce que je veux. Donc, je me suis retrouvé à l'aide alias_method, et le mettre comme

alias_method :user_programs, :programs 

def programs 
    return self.user_programs unless admin? 
    Program.all 
end 

Je me demande s'il n'y a aucun effet secondaire à la fonctionnalité ActiveRecord?