2016-08-16 6 views
1

ユーザーを管理するために使用しているdashboard_controllerがあります。コントローラは次のとおりです。このメソッドを置き換える適切なスコープは何ですか?

class DashboardController < ApplicationController 
    before_action :authenticate_user! 

    def index 
    if current_user.admin? 
     @users = current_user.get_organization_users 
    else 

    flash[:notice] = "Unauthorized Page View" 
    redirect_to(tasks_url) 
    end 
end 

注記私は@users = current_user.get_organization_usersを使用しています。ここに私のユーザモデルでget_organization_users方法は、私がスコープでこれに代わる方法...

def get_organization_users 
    self.organization.users 
end 

のですか?私は試しました...

scope :organization_users, -> { self.organization.users } 

...しかし作業がありません。どんな助けもありがたい。

+0

あなたはscope:organization_users、 - > {organization.users} 'を試しましたか? –

+3

なぜ 'current_user.organization.users'を使用しないのですか? –

答えて

1

scopeを使用してclass methodをモデルに追加します。しかし、instanceでメソッドを呼び出そうとしています。したがって、この場合、instance methodが意味を持ちます。

ただし、スコープを作成する場合は、user_idをパラメータとしてスコープに渡します。

0

あなたの質問についてはわかりません。現在のユーザーに関連付けられている組織に所属するすべてのユーザーを取得しますか?そのような場合は、current_user.organization.usersに電話するだけです。

スコープは、現在のモデルのレコードをフィルタリングするために使用され、リレーション内にあるオブジェクトを取得するためには使用されません。公式の文書:http://guides.rubyonrails.org/active_record_querying.html#scopesでそれについて読むことができます。

1

内部的には、アクティブレコードconverts scopes into class methodsです。

これは、インスタンスメソッドget_organization_usersをスコープで置き換えることはできず、クラスのインスタンスであるcurrent_userで呼び出すことを想定しています。

スコープを作成して引数(おそらくユーザーID)を渡し、そのスコープをユーザークラスで直接呼び出します。

私はあなたが望むなら、例を挙げることができますが、私はこのアプローチが希望のものよりずっと長いと思います。

関連する問題