質問

いレールを3プロジェクト.レールを用いた3Arelの再利用につ範囲を構築する。んかがある場合に利用スコープを定義する際関係などの"has_many").

ている記録の利用を許可していた。できる仕事をしたいと思っているdefault_scopeる私の許可列を考慮するよう記録もアクセスを通じて関係の差で管理します。

現在、レールを3,default_scopeを含むパッチがその場で発音を確認することがなを提供可能な手段を通論文集(必要な遅い変数。で定義するhas_manyる指定範囲に渡すことができ?

の考え方を再利用する範囲ようになる:

Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)}
has_many :orders, :scope => Orders.my_orders

または暗黙的に符号化の名の範囲の関係のようになる:

has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)}

んだへのご連絡は下記より受け付けてdefault_scopeレイに結合する。私の希望は、Arelアプローチ(ある場合でも使用可能なオプションです。

私はを参考に現在のユーザできないのでなない条件を評価しているので、

has_many :orders, :conditions => ["user_id = ?", User.current_user.id]
役に立ちましたか?

解決

いることをお勧めしたく "名前のオシロスコープは死んだ"

著者の説明がどのように強Arelは:)

あなたにとってどんな年でしたね。

編#1月2014

としてコメントの状態で、その違いは現在も個人の味わいです。

しかし、まだまだ個人的にはお勧めを防Arelの範囲の上層がコントローラーもアクセスする直接モデル)、そうすることが必要:

  1. 作範囲なのでスルーする方法。この方法である、まさにコントローラ
  2. こんな温かい先生なモデルをコントローラー(そういうサービス層ところは少なくなったらしいします。の腐敗防止層 サービスでのアクセスモデルの範囲を気にせずもつスコープを実施しています。

他のヒント

どのように関連の拡張子は?

class Item < ActiveRecord::Base
  has_many :orders do
    def for_user(user_id)
      where(user_id: user_id)
    end
  end
end

Item.first.orders.for_user(current_user)

UPDATE:私はクラスメソッドまたはスコープとは対照的に、関連の拡張子に優位性を指摘したいと思いますが、関連プロキシの内部へのアクセス権を持っているということです。

  

proxy_association.ownerアソシエーションがその一部であるオブジェクトを返します。   proxy_association.reflectionは関連を記述する反射オブジェクトを返します。   proxy_association.targetはbelongs_toの又はhas_oneの、もしくはにhas_manyまたはhas_and_belongs_to_manyアソシエーションのために関連するオブジェクトのコレクションに関連付けられたオブジェクトを返す。

ここでは詳細: http://guides.rubyonrails.org/association_basics.html#関連-拡張する

その代わり、私はちょうど素晴らしい仕事をしているクラスのメソッドを定義してきたスコープの

def self.age0 do
  where("blah")
end

私はのようなものを使用します:

class Invoice < ActiveRecord::Base
  scope :aged_0,  lambda{ where("created_at IS NULL OR created_at < ?", Date.today + 30.days).joins(:owner) }
end 

あなたはを異なるモデルからスコープをマージするために、の方法をマージすることができます。 詳細は、この railscastする

だけることができるよう、ユーザーの注文だと思利用の関係?

仮に、現在のユーザアクセスすることができcurrent_user方法でコントローラ:

@my_orders = current_user.orders

これにより、みユーザーの特定の注文が表示されます。することができま恣意的に結合にnestedていくの資源を使用 joins

current_user.orders.joins(:level1 => { :level2 => :level3 }).where('level3s.id' => X)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top