Операторы ИЛИ и рубин, где предложение - PullRequest
4 голосов
/ 21 сентября 2011

Возможно, это действительно просто, но у меня проблемы с поиском документации по этому поводу. У меня есть два запроса activerecord в Ruby, которые я хочу объединить с помощью оператора OR

@pro = Project.where(:manager_user_id => current_user.id )
@proa = Project.where(:account_manager => current_user.id)

Я новичок в ruby, но попробовал сам, используя ||

@pro = Project.where(:manager_user_id => current_user.id || :account_manager => current_user.id)

это не сработало, поэтому 1. я хотел бы знать, как на самом деле сделать это в Ruby, и 2. если этот человек также может дать мне подсказку о булевом синтаксисе в выражении ruby, как это вообще. например И, ИЛИ, исключающее ИЛИ ...

Ответы [ 3 ]

9 голосов
/ 21 сентября 2011

Вы не можете использовать синтаксис Hash в этом случае.

Project.where("manager_user_id = ? OR account_manager = ?", current_user.id, current_user.id)
2 голосов
/ 21 сентября 2011

Вы должны взглянуть на документацию API и следовать соглашениям.В данном случае для кода, который вы можете отправить методу where.

Это должно работать:

@projects = Project.where("manager_user_id = '#{current_user.id}' or account_manager_id = '#{current_user.id}'")

Это должно быть безопасно, так как я предполагаю, что значение id current_user исходит из вашего собственногоприложение, а не из внешнего источника, такого как отправка формы.Если вы используете представленные в форме данные, которые вы намерены использовать в своих запросах, вы должны использовать заполнители, чтобы Rails создавал правильно экранированный SQL.

# with placeholders
@projects = Project.where(["manager_user_id = ? or account_manager_id = ?", some_value_from_form1, some_value_from_form_2])

Когда вы передаете несколько параметров методу where (пример с заполнителями)), первый параметр будет рассматриваться Rails как шаблон для SQL.Остальные элементы в массиве будут заменены во время выполнения на количество заполнителей (?), Которое вы используете в первом элементе, который является шаблоном.

1 голос
/ 21 сентября 2011

Metawhere может выполнять операции ИЛИ, а также множество других интересных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...