可怕的丢失模板错误

时间:2015-06-13 15:07:49

标签: ruby-on-rails ruby missing-template

我已经阅读了我能找到的所有内容,而且我仍然感到难过。

我尝试使用before_filter来捕获未登录的用户,并将其发送到备用索引页面。我们的想法是,登录的用户在访问index.html.erb时会看到他们自己的文章列表,未登录的用户将重定向到列出文章的showall.html.erb页面但不会让他们阅读它们(并用一些广告点击它们)。

我添加了一条路线:

资源:文章做     得到" showall"
    资源:评论     

' Rake路线'显示路线article_showall。我在views / articles文件夹中有一个部分_showall.html.erb(它只包含文本' 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

我很难过。为什么我可以渲染&#39; showall&#39;在一个视图中,但是当我在控制器中引用它时,我收到了Missing Template错误?提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

David和user4703663是对的。您的问题是您将模板命名为部分模板,但将其渲染为模板。您可以从文件名中删除下划线并保留代码,或者保留文件名,并从索引视图中“渲染部分:'showall'”。

编辑:我应该补充说,丢失的模板错误不应该在你心中灌输恐惧。它直接引导你犯错误。不要强调它,只是想记住下次的意思。它几乎总是一个拼写错误,或加载一个部分,但将其命名为模板,反之亦然,或忘记相对路径或类似的子文件夹。这是正常的,翻译会吐出这些错误来帮助你,而不是压迫你。

答案 1 :(得分:0)

替换

render 'showall', :notice => "Please log in to read articles."

render :file => '/partial/showall', :notice => "Please log in to read articles."

答案 2 :(得分:0)

很好,解决了这个问题,现在又吐了回来      未定义的方法`每个&#39;为零:NilClass

尽管&#39; showall&#39;几乎与指数相同。

SIGH