{ :conditions => ["#{"(visibility = #{Shared::PUBLIC}) || " if include_non_employee_public} (visibility IN (#{employee_privacy}) AND user_id IN (#{users}))"] }
Это сбивает с толку попытки перепроектировать то, что вы пытаетесь сделать здесь.Обычно в SQL-запросе всегда следует использовать «ИЛИ», а не «||».||будет работать только в вашем коде ruby.Кроме того, обычно вы должны использовать?и затем поместите значение потом, вместо того, чтобы использовать оценку строки.Это будет работать лучше, например, с массивами, которые вы здесь используете.Например,
{ :conditions => ["#{"(visibility = ?) || " if include_non_employee_public} (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users] }
Хорошо, следующий шаг - понять, что вы пытаетесь сделать.Допустим, ради аргумента, что include_non_employee_public имеет значение true.Тогда вы получите
{ :conditions => ["(visibility = ?) || (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users] }
Давайте обменять это ||для или он будет работать в sql:
{ :conditions => ["(visibility = ?) or (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users] }
Это то, что вы пытаетесь сделать?Это теперь не будет работать, потому что в случае, когда include_non_employee_public имеет значение false, теперь у вас есть запасное значение (Shared :: Public) во второй части списка аргументов.Я бы для простоты разбил это на выражение if:
if include_non_employee_public
conditions = ["(visibility = ?) or (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users]
else
conditions = ["visibility IN (?) AND user_id IN (?)"], employee_privacy, users]
end
Теперь вы можете сказать: условие => условия в вашем запросе.