Вспомогательный метод из 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, Там нет ошибки, вам просто нужно выяснить, почему ваш запрос возвращает ноль записей.

Другие вопросы по тегам