2017-09-17 8 views
-1

私はまだRubyと特にRailsは新しく、まだレールの仕方で正しく動作する方法を学びます。 だから私はクラスの下から特定のユーザー(例:Admin)のカスタムActiveRecordクエリ

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 

以下のようなUserクラスは、私はprogramを得るためにそれを理解している、useruser_program_rolesに存在することがあります。私の質問は、ユーザがなくてもすべてのプログラムをuser_program_roles(たとえば私はAdminであり、すべてのプログラムを見たいと思っている)に取り込むことができるということです。それを達成するための最善の方法は何ですか?

Update

だから、気圧のアプリでは、私はこのcurrent_user.programsのようなものを持つことができ、current_useruser_program_rolesのレコードを持っている場合には、すべてのプログラムをフェッチします。私はそれに似て達成することができ、私は(Userクラス内)Rubyでこのような何かを行うことができれば、私は知らない

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

あなたの宣言はすでに正しいです。すべてのプログラムを取得するには 'Program.all'を使うだけです。ユーザーがプログラムに関連付けられている場合、ユーザーは 'user_program_roles'にのみ存在します。 – vee

+0

私は達成しようとしているもので私の質問を更新しました。しかし、そのコードは機能しませんでした。 ActiveRecordメソッドを上書きすることはできますか? –

答えて

0

私は私が欲しいものそれを把握。だから私はalias_methodを使用して終了し、ActiveRecordの機能に何らかの副作用があるのなら、私は、不思議

alias_method :user_programs, :programs 

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

のようにそれを置きますか?

関連する問題