Ruby on rails 3 显示作者和时间错误?

Ruby on rails 3 显示作者和时间错误?,ruby-on-rails-3,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

我在文章页面上有这个方法,显示文章作者和时间戳,它在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'
文章中的命名错误#索引
显示/Users/blog/app/views/articles/_article.html.erb,其中第13行出现:
nil:NilClass的未定义方法“User”
提取的源(第13行附近):
11:
12: 
13:于
14: 
15: 
模板包含跟踪:app/views/articles/index.html.erb
Rails.root:/Users/blog
应用程序跟踪|框架跟踪|完整跟踪
app/views/articles/\u article.html.erb:13:in``应用程序视图\u articles\u文章\u html\u erb\u 997953145\u 2197490260\u 6874828'
app/views/articles/index.html.erb:15:in`_app_views_articles_index_html_erb_514612748_2197511860_0'
app/controllers/articles\u controller.rb:11:in'index'

首先,它不是

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

但是


你能展示一下你正在初始化@user的控制器吗

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


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

def show
  @article = Article.find(params[:id])
end
但是,如果确实需要加载一个article对象,请确保您的index方法也有类似的内容

def index
  @articles = Article.all
  @article = Article.find(params[:id])
end
现在,我不知道您的索引页面的目标是什么,但是您必须从某个地方传入一个特定的ID,以便在“index”中加载文章对象。因此,这是一个有点做作的例子

在“index”方法中实例化对象的一个常见用例是,如果索引页上有“newarticle”表单,它需要一个空的Article对象来处理。例如:

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

未定义文章。但是,我希望
@articles
是,而您的局部变量希望是实例变量而不是局部变量。可以看到文章部分、索引页和控制器的代码吗?它不允许我发布您作为新手请求的代码:-(我认为您对错误消息的格式设置有点太多。是“未定义方法
User”表示nil:NilClass还是“未定义方法
User”表示nil:NilClass”?User是一个类,User是一个不能在不存在的@article上调用的方法。这意味着@article是nil:)而不是@article实例变量,只需删除@and try article,它与partial的名称相同,因此可能包含实际的“article”你说得对-删除article.user.username中的@in和article.created中的@in起了作用。谢谢:-)在索引中实例化新的@article将如何解决@article.user.username的问题?用户很可能已经获得了正确的@articles。他们使用partials来使用render集合,这会否定无用且昂贵的实例变量@article的声明,因为Rails会自动从@articles数组中为您提供与partials名称相同的对象。
def index
  @articles = Article.all
  @article = Article.find(params[:id])
end
def index
  @articles = Article.all
  @article = Article.new
end