2016-07-28 11 views
1

私はRailsでスコープを書く方法を学ぼうとしています。Railsでスコープを作成するにはどうすればよいですか?

私はユーザー、組織、組織の要求のモデルを持っています。団体は以下のとおりです。私の組織の要求モデルで

User 
    has_one :organisation 

Organisation 
    belongs_to :owner, class_name: 'User' 
    has_many :organisation_requests 

Organisation_request 
    belongs_to :organisation 

、私は組織の所有者に属するすべての組織の要求を選び出すためのスコープを書くしようとしています。

scope :same_org, where(:organisation_id => owner.organisation_id) 

はその後、私のorganisation_requestsコントローラでは、私が持っている:

def index 
    @organisation_requests = OrganisationRequest.same_org 
end 

は、私は上記を試してみました。所有者はユーザーのエイリアスです。各組織では、1人のユーザーがその組織の所有者として指名されます。私はそのユーザーに、その所有者の組織のために来る組織要求のインデックスを見てほしい。

私がここで間違っていることを誰にでも見られますか?私はスコープを書く方法について何かを理解していない。お使いのモデルで

+1

構文はHasmukhの答えが示すように、ラムダを使用しています。 [http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html#method-i-scope] (http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods)を参照してください。 .html#method-i-scope) –

+0

ねえ、これを解決しましたか? –

+0

こんにちは@AndreyDeineko - 私はまだそれを解決しようとしています。私はスコープを呼び出すのを止めている別の問題があります - 私はそれで最初に取り組んでいます。私はあなたのノートを持っており、私がそれを働かせればあなたの答えを受け入れるように更新されます。フォローアップをありがとう。私は学ぶのがとても遅いです... – Mel

答えて

2

、この試してみてください。upvoted答えが間違っている

scope :same_org, -> {where(:organisation_id => owner.organisation_id) } 
+0

間違っている。あなたはどのように所有者が 'organisation_id'を所有していると思いますか?' organisation''はオーナーですか? –

1

を(個人的な何も、@Hasmukh Rathod) - (それはその逆、実際のですusersテーブルにorganisation_id列がありません - ありorganisations表のuser_id欄)。

私は、次の解決策を示唆している:

scope :same_org, ->(owner_id) { joins(organisation: :user).where(users: { id: owner_id }) } 

は、上記の範囲を有する、あなたがする必要がありますどのような、引数としてowner_idを渡すことです。私はスコープに引数を渡さずに動作させる方法があると確信していますが、どのように(私はちょうど目を覚ましました:D)まだわかりません。

ですから、例えば:

​​
関連する問題