У меня нет модели, похожей на вашу, так что это своего рода выстрел в темноте, buuut ...
Вы не хотите передавать строку "true" в ваш запроспотому что open никогда не будет равняться строке "true".Это логическое значение, а не строка.Предположительно.
Так что попробуйте что-то вроде этого:
offset = rand(Question.joins(:responses).where('responses.user_id <> ? and open = ?', current_user.id, true).count)
@question = Question.joins(:responses).where('responses.user_id <> ? and open = ?', current_user.id, true).at(offset)
Нет обещаний, но это только начало.
Я действительно думал о гораздо более простом способе сделать это, чем оиспользуя два отдельных запроса!
Попробуйте это:
Question.joins(:responses).where('responses.user_id <> ? and open = ?', current_user.id, true).order('RAND()').first
Это не будет работать в таких вещах, как SQLite, у которых нет оператора RAND()
, но в противном случае вы получитеодна случайная запись, которая соответствует остальным критериям.