Вспомогательный метод из application_controller недоступен для просмотра
Контроллер приложения имеет вспомогательные методы: current_user доступен из всех моих представлений. Но pro_user совершенно недоступен с моей точки зрения.
def current_user
@current_user ||= User.find_by_auth_token( cookies[:auth_token]) if cookies[:auth_token]
rescue ActiveRecord::RecordNotFound
end
helper_method :current_user
def pro_user
@pro_user ||= Subscription.where(:email => current_user.email).pluck(:email)
return @pro_user
rescue ActiveRecord::RecordNotFound
end
helper_method :pro_user
Теперь, если я обращаюсь к pro_user, его всегда ноль. Но, как ни странно, у меня есть метод под названием current_user также в контроллере приложения, который является helper_method. Это работает хорошо в представлении.
Не могли бы вы мне помочь пожалуйста?
1 ответ
Вы неправильно диагностируете вашу проблему. Он работает просто отлично, и представление определенно может увидеть ваш метод, но ваш метод возвращает nil
, Ваш метод ничего не возвращает.
Если бы метод на самом деле не был доступен, вы бы увидели исключение на этот счет. Ruby не просто разрешает неизвестные методы nil
,
По мнению я пытался увидеть, если pro_user.email.blank? и его ноль все время.
Это недопустимый способ использования значения, возвращаемого методом, который вы опубликовали. Возвращает массив.
Я также попытался @pro_user в представлении. Все правильно печатается в контроллере приложения, но его ноль в представлении.
Это не так. Метод возвращает массив из нуля или более адресов электронной почты, вот что pluck
делает это для. Возвращаемое значение никогда не будет отвечать на .email
, Вам нужно будет использовать pro_email.any?
проверить, содержит ли массив какие-либо элементы.
Вы также не можете просто получить доступ @pro_user
, Это не вызывает метод, который обращается к переменной-члену, которая будет nil
по умолчанию.
Я делаю <%, если pro_user.blank? %> {..до бла..}
Это неверный синтаксис erb. Предполагая, что ваш синтаксис на самом деле правильный, blank?
вернусь true
для пустого массива. Метод возвращается []
не nil
, Там нет ошибки, вам просто нужно выяснить, почему ваш запрос возвращает ноль записей.