Каждый из ваших операторов заменяет переменную @users
, и, поскольку ActiveRecord оценивает каждую лениво, первые два никогда не вызываются.
Если вы хотите поддерживать три отдельных запроса и строить их таким образом, вы можете сделать:
@users = User.limit(10)
@users = @users.where('id', params[:id]) if params[:id]
@users = @users.where('email', params[:email]) if params[:email]
Это не самая красивая, но она будет работать. Тем не менее, я рекомендую оставить его для одного вызова метода и определить его в модели.
# In the model
def self.by_id_and_email(id, email)
users = limit(10)
users = users.where('id', id) if id.present?
users = users.where('email', email) if email.present?
users
end
# In the controller / out of the model
User.by_id_and_email(params[:id], params[:email])
Таким образом, вы можете снова использовать метод, уточнить его и написать тесты скорости (ier) для него.