2011-11-15 18 views
2

私はモデリストと呼ばれるリストを持っています。私はモデルのすべてのインスタンスを見つけたいと思います。モデリスト[model.id]> 0 私はどのようにこれをクエリを使用して達成することができます。 は、今私はこのクエリで完了と同じにしたいこの機能Railsクエリの外部関数

finalmodels = [] 
@models.each do |model| 
    if modellist[model.id] >0 
    finalmodels.push(model) 
    end 
end 
@models = finalmodels 

を持っている、しかし、私はそれを把握するカント。そう

Model.where(... modellist[model.id]>0) 
+0

'何をmodellist'さのいずれかをしたいときのため

models = Model.find(:all).collect{|m| (modellist[i.id] < 0)? m:otherval } 

ような何かを行うことができますか? – tadman

+0

@tadmanそれは、モデリスト[model.id] =数字 – jack

答えて

0

のようなものは、あなたがこのような数値として、またはクエリの一部として供給することができるもの、という点でクエリを指定する必要がありますので、あなたのクエリは、SQLドメインではなく、Rubyのドメインで完全に動作することを忘れないでください文字列値、またはデータベースに格納されている値に適用可能な条件。 SQLサーバーには、アプリケーションの内部状態に関する知識がありません。これは、問合せでユーザーが指定したもの以外のものです。または、以前にデータベースの状態に保存されています。

開発者としての課題は、アプリケーションの状態をデータベースが実行できるものに変換する方法を理解することです。おそらくこれはmodellistをデータベースに保存してクエリーに含めることができる、または勝つことができない戦争と戦うのではなく、別の解決策を思いついて問題を再検討することを意味する可能性があります。それは行くHERESにどのように解決策を見つけた

+0

アドバイスのおかげで整数のリストです – jack

+0

それは数字のリストであれば、キーを抽出し、簡単なクエリを行うことができるはずです: 'Model.where :modellist.select {| k、v | v> 0} .collect {| k、v | k}) 'これは、フェッチするために' modellist'ハッシュをキー配列に変換して取得します。 – tadman

+0

私はあなたが言ったことを試しました、それは正確に動作しなかったので、私はcollectメソッドを調べました。私はこのクエリを作った@models = Model.find(:all).collect {| m | modellist [m.id]> 0}、それはそこにエラーを投げませんが、後の行で私は@models = @ models.sort {| mod1、mod2 | modellist [mod2.id] <=> modellist [mod1.id]}リストをモジュールリストの量でソートする前に、この行は以前はうまくいきましたが、エラーのために未定義のメソッドidがfalseになりました:FalseClass here – jack

0

(これは正確に適切ではありませんが、それは私が考えることができる最も近いリアルなソリューションです)

models = Model.find(:all).collect{|m| m }.reject{ |i| modellist[i.id] < 1 } 

コレクト一部は(パラメータmで)すべてのモデルを経て、 | mの後に値を代入する| (この場合はm)。その後、条件(modellist [i.id] < 1)が真の文であるとき、拒否はパラメータiで拒否され、拒否されます。また、あなたは2ヴァルス

+0

これはクエリではありませんが、コードは少なくなっています。私はまだ私の問題(この同じタスクを完了するクエリ)への答えが大好きです – jack

関連する問題