私はDjangoでクエリセットで複数のフィルタメソッドを実行することができます。つまりItem.all.filter(foo="bar").filter(something="else")
です。レールでActiveRecordクエリをフィルタリングする
ただし、これはRailsではあまり簡単ではありません。 Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }])
が、これは動作しません意味配列を返します。
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
だから私は「スタック」のフィルターへの最善の方法は、条件の配列を変更し、クエリを実行することです考え出し。
だから私はこの機能を思い付いた:
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
使用法:
配列1 = [ "FOO = foo" という、{:FOO = 'バー'}] 配列2 = [ "何か=:something "、{:something = 'else'}] 条件=結合(配列1、配列2) items = item.find(:all、:conditions =>条件)
これはかなりうまくいっています。しかし、私は任意の数の配列を組み合わせることができる、または基本的に書くための略記:
conditions = combine(combine(array1,array2),array3)
誰でも助けてもらえますか?前もって感謝します。
それはまさに私が欲しいものです。私はスクリーンキャストを見て、それは私には完全に意味がありました。しかし、私がコードを起動するとすぐに、名前付きスコープが定義されていないメソッドであるというエラーが出ました。それから、私はRails 1.8で作業していたことに気づいたので、私は2.3レールに更新しましたが、同じエラーが出ました.... ugh、名前付きスコープが本当に良いと分かっていました:/ – user94154
Railsを凍結した場合、あなたのコードはまだ以前のバージョンのRailsを使用しています。 Rails 1.8は決して存在しなかったので、Ruby 1.8を意味する必要があります。 rails -vはコマンドラインに存在するRailsのバージョンを知らせるコマンドです。 script/aboutはアプリケーションの環境について詳しく説明します。 –
rubyスクリプト/約が認識されませんでした。 Railsに関してフリーズはどういう意味ですか? – user94154