2016-09-04 4 views
1

私は子供の情報を格納するRailsアプリケーションを持っていますが、特定のフィールドはchildアナフィラキシーになり、私はChildモデルのメソッドを定義してチェックできますアナフィラキシーの記録に残っている。例えば、childは、10の特定のフィールドがnilである場合、アナフィラキシーである。私は@anaphylactic_kids = Kid.where(. . . and . . . and . . .)を書き留めたくないので、本当に長くなるでしょう。これを行う簡単な方法はありますか?すべての助けてくれてありがとう!モデル内のレコードにnil checkが定義されています。

答えて

4

は、少なくとも一度はフルwhere句を書き出す回避するための簡単な方法はありませんが、あなたはにあなたはそれのためのスコープを作成することにより、それを使用したいすべてのコントローラアクションを、それを書くことを避けることができます。代わりに、あなたのコントローラーでフルKid.whereステートメントを使用しての

def self.anaphylactic 
    Kid.where(:field1 => nil, :field2 => nil, :field3 => nil) 
    # complete the where clause for every field you need to check 
end 

今、あなたは、単に同じ結果を得るためにKid.anaphylacticを呼び出すことができます。あなたのモデルで

は、このメソッドを追加します。

+0

名前付きスコープを定義することもできますが、ArtOfCodeによって提案されたソリューションはより優れたIMOです。また、このSQLがこのようなクエリについて説明していることに気をつけてください。将来的には適切なインデックスで十分でしょう。 – Sebastian

+0

@Sebastianという名前のスコープとモデルクラスのメソッドはほぼ同じものですが、いくつかの違いがありますが、最後に同じ関数を実行します。 – ArtOfCode

+0

これは私が探していた正確なアイデアのようです、ありがとう! –

関連する問題