Ruby on Rails 3 - 显示作者和时间错误



我在文章页面上有这个方法,它显示了文章作者和时间戳,它在view/articles/show.html.erb中工作正常。但是当我在/views/articles/_article.html.erb 下的索引页面上放置相同的方法时,我不断收到此错误 - 它在一个页面显示中有效,但在另一个页面显示中无效。有什么建议吗?

"错误:"

NoMethodError in Articles#index
Showing /Users/blog/app/views/articles/_article.html.erb where line #13 raised:
undefined method `User' for nil:NilClass
Extracted source (around line #13):
11:
12: <div class="post_by">
13: Posted by <%= @article.user.'username' %> on <%= @article.created_at.strftime("%B %d, %Y") %> 
14: </div>
15: 
Trace of template inclusion: app/views/articles/index.html.erb
Rails.root: /Users/blog
Application Trace | Framework Trace | Full Trace
app/views/articles/_article.html.erb:13:in `_app_views_articles__article_html_erb__997953145_2197490260_6874828'
app/views/articles/index.html.erb:15:in `_app_views_articles_index_html_erb___514612748_2197511860_0'
app/controllers/articles_controller.rb:11:in `index'

它期望存在一个@article对象,并且您可能没有在索引方法中初始化一个对象。例如,"show"定义了它:

def show
  @article = Article.find(params[:id])
end

但是,请确保您的索引方法也有类似的东西,如果您确实需要加载文章对象

def index
  @articles = Article.all
  @article = Article.find(params[:id])
end

现在,我不知道您对索引页面的目标是什么,但是您可以从某个地方传入特定ID,以便在"index"中加载文章对象。因此,这是一个有点人为的例子。

在"index"方法中实例化对象的一个常见用例是,如果索引页本身上有"New Article"表单,并且需要一个空的文章对象才能工作。 例如:

def index
  @articles = Article.all
  @article = Article.new
end

首先,它不是

<%= @article.user.'username' %> 

<%= @article.user.username %>

您能否在初始化@user的位置展示更多控制器?

更新:基于下面评论中给出的更多信息。错误消息不是在"用户"上,而是在"用户"上。因此,解决方案是使用 _article.html.erb 部分提供的"article"对象(很可能作为从另一个视图呈现部分调用的一部分调用)。

 <%= article.user.username %>

相关内容

  • 没有找到相关文章

最新更新