Страшная ошибка отсутствующего шаблона

Я прочитал все, что я могу найти, и я все еще в тупике.

Я пытаюсь использовать 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".

ВЗДОХ

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