Я довольно новичок в RoR, так что это может быть вопрос новичка, но я не смог найти ответ на него и решить проблему.
Мне нужно проверить каждый отдельный элемент из динамического массива (который создается соединением HABTM через таблицу соединений) на наличие условия.
Прямо сейчас у меня есть что-то вроде этого:
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]
}
}
}
Это показывает мне синтаксическую ошибку.
Но я думаю, что даже если мне удастся заставить его работать таким образом, он не будет выполнять SQL-запрос правильно, так как ts и tts связаны с HABTM, поэтому значение в таблице равно NULL, и мне придется создать другое соединение в этом запросе. ,
Я действительно понятия не имею, как решить эту проблему.
Любые советы будут полезны.
Спасибо,
Niko
Edit:
Мой контроллер выглядит так
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 и нескольких Checkboxes.
Блок выбора получает свои значения из таблицы «устройства» и после отправки формы передает выбранное значение контроллеру в качестве параметра: d.
Флажки - это список из всех записей таблицы «testtypes», и после отправки формы она передает массив всех проверенных testtype_ids из таблицы в контроллер в виде параметра: t. (работает правильно)
Теперь есть еще одна таблица «tests», которая имеет соединение HABTM со всеми записями в устройствах и типами тестов, так что я могу собрать специальные соединения с 1 устройства и нескольких тестовых типов вместе в одной записи.
Теперь в таблице «пользователи» есть столбец «тесты», который ссылается на таблицу «тесты» в подключении HABTM, поэтому 1 пользователь может (участвовал) в нескольких тестах (которые могут иметь несколько типов тестов).
Таким образом, после отправки формы значения: d и: t должны использоваться для запроса SQL для фильтрации всех пользователей по тестам (тогда как тесты зависят от устройств и типов тестов). Таким образом, все пользователи должны проверить в столбце тесты значения ссылающихся тестов в устройствах (: d) и testtypes (: t []).
Но так как тестовые типы (: 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
Может ли кто-нибудь помочь мне с этим?
Никто не понял? : '(