Подтвердить что ты не робот

Не соответствует условному

Я хочу иметь предложение where с равным и не равным условию:

@user = User.where(:user_id => current_user.id, :author_id != current_user.id).nil? ? (render :something) : (render :somethingelse)

Вышеуказанное не работает:

синтаксическая ошибка, неожиданная ')', ожидая tASSOC... d,: user_id != current_user.id).nil?? (оказывать: index): (re...

Если я изменил второе условие от != до =>, оно будет работать, однако.

Как у меня есть оба условия в одном, где clase? Спасибо вам

4b9b3361

Ответ 1

Здесь, как вы бы использовали Arel для генерации запроса "select * from users where user_id = ? and author_id != ?":

users = User.arel_table
User.where(users[:user_id].      eq(current_user.id).and(
           users[:author_id].not_eq(current_user.id)))

Использование Arel не столь краткий, как использование условий Хэша для простых условий, но оно намного мощнее!

Здесь ссылка на полный список предикатов (eq, not_eq, gt, lt и т.д.), доступных с Arel.

Ответ 2

Я считаю, это должно быть:

@user = User.where(['user_id = ? AND author_id <> ?', current_user.id, current_user.id])
render(@user ? :something : :somethingelse)

Ответ 3

Рельсы 4 все это выяснили

Model.where.not(:colname => nil)
#=> returns all records whose :colname values are not nil

Ответ 4

Синтаксическая ошибка связана с тем, что вы пытаетесь использовать != вместо =>. Метод where не поддерживает неравенство с хешированными аргументами, поэтому ваш не равный должен быть написан с использованием аргументов массива.

User.where(:user_id => current_user.id).where(['users.author_id <> ?', current_user.id])

Ответ 6

Не уверен, что вы знаете, условие не равное обычно не соответствует (author_id) значениям NULL. Вам нужно будет сделать OR author_id IS NULL, если вы этого хотите.

@users = User.where("user_id = ? AND (author_id != ? OR author_id IS NULL)", 
                    current_user.id, current_user.id)

render(@users.present? ? :something : :somethingelse)

Также обратите внимание, что я использую @users.present?, потому что where finder возвращает массив ActiveRecord::Relation.