これは初心者の質問かもしれないので、私はかなりRoRに新しいですが、私はそれに答えを見つけて問題を解決できませんでした。 条件のために、動的配列(結合テーブルを介してHABTM接続によって作成される)からすべての要素をチェックする必要があります。これは私に構文エラーを示し各アレイオブジェクトのRoRスコープ
scope :filter, lambda { |devicefilter, testtypefilter|
{
testtypefilter.each { |testtype|
:include => :tests,
:conditions => ['(tests.device != ? OR tests.device IS ?) AND ? NOT IN tests.testtypes', devicefilter, nil, testtype]
}
}
}
:
今私はこのような何かを持っています。 しかし、私はそれがtsとttsはHABTMによって接続されているので、SQLのクエリを正しく実行しないので、テーブルの実際の値はNULLであり、私は別の結合を作成する必要があるので、クエリ。 私は本当にこれを解決する方法を知りませんでした。 ヒントがあれば助かります。
おかげで、 ニコ
編集: 私のコントローラは、この
if params[:d] == nil or params[:t] == nil
@users = User.all
else
@users = User.filter(params[:d], params[:t])
end
次のようになります。dがselect_tag から来ている固定値である:tがから来ている配列です
値がすべて正しくモデルに正しく渡されています。したがって、ビューまたはコントローラは問題ではありません。
Edit2: 少し不明なので、ここに現状があります: セレクトボックスと複数のチェックボックスで構成されるフォームがあります。 Select-Boxはテーブル "devices"から値を取得しており、フォームが送信された後、選択された値がパラメータとしてコントローラに渡されます。d。 チェックボックスはテーブル "testtypes"のすべてのエントリのリストで、フォームが送信された後、チェックされたすべてのtesttype_idsの配列がテーブルからコントローラにパラメータとして渡されます。
ここで、デバイスとテストタイプのすべてのエントリに対するHABTM接続を持つ別のテーブル「テスト」があります.1つのデバイスと複数のテストタイプを1つのエントリにまとめて特別な接続を集めることができます。
テーブル "users"には、HABTM接続のテーブル "tests"を参照する "tests"という列があり、1人のユーザーが複数のテスト(複数のテストタイプを持つことができます)を持つことができます。
フォームが送信された後、dおよびtは、すべてのユーザーをテストでフィルタリングするSQLクエリ(テストはデバイスとテストタイプによって異なります)に使用されます。したがって、すべてのユーザーは、カラムテストで、デバイス(:d)とテストタイプ(:t [])の参照テストの値をチェックする必要があります。
しかし、testtypes(:t [])は配列として渡されているので、何とかその配列のすべての要素をSQLリクエストでチェックする必要があります。または配列全体をチェックする方法はありますか?
例:
There are 3 Devices: (dynamic table)
A01
A02
A03
There are 3 Testtypes: (dynamic table)
TT01
TT02
TT03
There are 4 Tests: (dynamic table with HABTM devices and testtypes)
T1 = A01 - TT01/TT03
T2 = A01 - TT03
T3 = A02 - TT02/TT03
T4 = A03 - TT01/TT02/TT03
There are 5 Users: (dynamic table with HABTM tests)
U1 = ... T1 ...
U2 = ... T2/T4 ...
U3 = ... T3/T4 ...
U4 = ... T1/T2/T3 ...
U5 = ... T3/T4 ...
Now the Form will look like:
Device: Select-Box={A01/A02/A03}
Testtypes: Checkboxes={TT01/TT02/TT03}
If i select now A01, check TT01+TT02 and submit the query should return every single User who has not participated in the following Tests:
A01 - TT01
A01 - TT02
So at last i get a list of users that i could use for the test A01 - TT01+TT03, since there are no conflicts.
So the query would return every user who has not participated in T1, since that is the only conflict.
So the userlist would look like:
U2
U3
U5
誰かがこれで私を助けることができますか? いいえ、考えられませんでしたか?: '(
あなたが持っているものを教えてください。あなたが本当に間違った方法をとっているからです。 – Robin
私は選択ボックスといくつかのチェックボックスからなるフォームを持っています変化する可能性があります)。このフォームを使用して、すべてのPtsの表の列「ts」で表をフィルター処理する必要があります。列tsはHABTM(1.d、2.t)を持つ別の表(ts)であるため、2つの値で構成されています。そして、それらのtは、dとtとの別のHABTM接続を有する。 dはテーブルdからの固定値(select_tagで選択)、tはテーブルtからの配列(チェックボックスで選択)です。私が欲しいもの:単にフィルタが動作し、正しいSQLリクエストを渡すので、フィルタリングされたテーブルが得られます。 :) – Nikom
'lambda {| df、ttf |'の後に '{'を使用しないでください。 – Mischa