2016-05-18 11 views
0

Containerのモデルhas_and_belongs_to_many Papers has_one Statusがあります。名前のスコープを上書きする属性rails

Containerモデルに名前付きスコープを設定して、すべてのコンテナに特定のステータスセットを含む用紙のみが入力されるようにしたいとします。

私は、次の(擬似コード)のようなものを持っているコンテナモデルに

scope :by_status, -> (statuses) do { 
    joins(papers:[:paper_statuses]).where('paper_statuses.tag in (?)', statuses) if statuses.present? 
} 

私が手戻りがステータスに関係なく、容器内の論文のすべて..ですしかし、奇妙な部分がすべてです状態は、存在する限り、私が渡すものになります。何が起こりますか、私が気にするものが特定のステータスを持つものであれば、コンテナオブジェクトのすべての用紙を上書きして読み込まないようにするにはどうしたらいいですか?

答えて

0

Containerモデルで名前付きスコープを作成すると、指定されたステータスのPaperを少なくとも1つ含むすべてのContainersが取得されます。

@containers.first.papersに電話をした後、Containerのすべての論文が(論文の)ステータスに関係なく取得されます。それは期待される行動です。 構造が似ていて、オブジェクト内のステータスを置き換えることができません。

あなたのSQLクエリを表示するには、explainメソッドを使用してください。 ContainerオブジェクトとそのPapersを収集するために使用するコードを貼り付けてください。

最後に、名前付きスコープをPaperモデルに移動する方が良いでしょうか?そうすれば、あなたはコードを気にステータスのPapersを収集することがあります。

Container.first.papers.by_status(statuses)

私は私の答えは何とかあなたを助けることを願っています。乾杯!

関連する問題