Страшная ошибка отсутствующего шаблона
Я прочитал все, что я могу найти, и я все еще в тупике.
Я пытаюсь использовать before_filter, чтобы поймать пользователей, которые не вошли в систему, и отправить их на страницу альтернативного индекса. Идея состоит в том, что пользователи, которые вошли в систему, увидят список своих статей при нажатии на index.html.erb, а пользователи, которые не вошли в систему, будут перенаправлены на страницу showall.html.erb, на которой перечислены статьи, но нет пусть читают их (и бьют по ним рекламой).
Я добавил маршрут:
ресурсы: статьи делают
получить "Showall"
ресурсы: комментарии
конец
"Рейк маршруты" показывает маршрут article_showall. У меня есть частичный _showall.html.erb в папке views/ статьи (он содержит только текст "showall работает!"). Если я отображаю showall в другом представлении (<% = render "showall"%>), это работает нормально.
Это соответствующая часть моего контроллера:
class ArticlesController < ApplicationController
skip_before_action :authorize, only: [:index, :show, :showall]
before_filter :require_user, :only => [:index]
def require_user
unless User.find_by(id: session[:user_id])
render 'showall', :notice => "Please log in to read articles."
end
end
def index
@articles = current_user.articles
end
def showall
@articles = Article.all
end
Когда я запускаю его (пока не вошел в систему), он получает следующую ошибку:
Missing template articles/showall, application/showall with....etc
Я в тупике. Почему я могу отобразить 'showall' в представлении, но при обращении к нему в моем контроллере появляется ошибка Missing Template? Спасибо заранее за любую помощь!
3 ответа
Дэвид и пользователь4703663 правы. Ваша проблема в том, что вы назвали шаблон частичным, но отображаете его как шаблон. Вы можете либо удалить подчеркивание из имени файла и оставить свой код как есть, либо оставить имя файла без изменений и "частичное отображение:" showall "" из представления индекса.
редактировать: я должен добавить, что ошибка отсутствующего шаблона не должна внушать страх в вашем сердце. Это ведет вас к вашей ошибке, напрямую. Не подчеркивайте это и просто попытайтесь вспомнить, что это значило в следующий раз. Это почти всегда опечатка, или загрузка части, но именование ее как шаблона или наоборот, или забывание подпапки для относительного пути или чего-то в этом роде. Это нормально, и переводчик выплевывает эти ошибки, чтобы помочь вам, а не притеснять вас.
Замещать
render 'showall', :notice => "Please log in to read articles."
с
render :file => '/partial/showall', :notice => "Please log in to read articles."
Отлично, исправили эту проблему, и теперь она выплевывает
неопределенный метод `each'для nil:NilClass
даже если "showall" почти идентичен "index".
ВЗДОХ