显示作者和时间错误?

时间:2011-05-16 17:01:48

标签: 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'

2 个答案:

答案 0 :(得分:0)

首先,它不是

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

但是

<%= @article.user.username %>

您可以在初始化@user的地方显示更多的控制器吗?

更新:根据以下评论中提供的更多信息。错误消息不是“用户”而是“用户”。因此,解决方案是使用_article.html.erb部分提供的“article”对象(最有可能作为另一个视图的渲染部分调用的一部分调用)。

 <%= article.user.username %>

答案 1 :(得分:0)

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

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

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

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

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

在“索引”方法中实例化对象的常见用例是,如果您在索引页面上有“新文章”表单,并且需要一个空的Article对象来处理。 E.g:

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