0

У меня есть следующий код в моем верхнем меню навигации:Rails - .где метод не работает

<% if current_user.relationships.where(state: 'active') %> 
    <li><%= link_to 'New Schedule', new_schedule_path %></li> 
<% end %> 

USers have_many отношение. «state» - это столбец в таблице отношений. Я хочу, чтобы ссылка отображалась только в том случае, если у пользователя есть отношение, в котором значение столбца состояния установлено на «активное». По какой-то причине эта ссылка появляется для пользователей, у которых нет отношений с состоянием = активна. Как это исправить?

ответ

2

Вы должны изменить его

current_user.relationships.where(state: 'active').exists? 

или

current_user.relationships.where(state: 'active').first 

current_user.relationships.where(state: 'active') возвращает объект ActiveRelation, и это не оценивается ложь в Ruby. Только nil из false является

+0

Не указан ли код, который я написал, чтобы проверить, существует ли он? – Philip7899

+0

@ Philip7899 Нет, он просто возвращает объект ActiveRelation. Запроса 'SQL' не происходит, пока вы не назовете' exist? 'Или' first' или 'each' на объект, lazyloading !! :) – Santhosh

+0

Отлично, спасибо тонну! – Philip7899

0

Использование:

current_user.relationships.where(state: 'active').any? 

Поскольку даже если нет никаких отношений, где метод будет возвращать пустой массив, который не равен нулю.

Смежные вопросы