显示RAILS中单个用户的所有帖子

时间:2011-11-24 03:08:00

标签: ruby-on-rails

我对rails非常陌生,我正在尝试显示用户在我的应用中发布的所有帖子。我确实在这个论坛中发过类似的帖子,但没有成功。我做了一些带有名称,标题和内容属性的脚手架,然后用'name'属性创建了一个名为Blogger的模型。

这是我的代码

控制器

class BloggersController < ApplicationController

  def show
    @blogger = blogger.find(params[:id])
    @title = @blogger.name
    @posts = @blogger.posts
    respond_with(@posts)
  end
end

查看

Index.html.erb

<% @blogger.post.each do |post| %>
  post.name
  # Comments to the Post
  post.comments.each do |comment|
    comment.comments
 <% end %>

模型

class Post < ActiveRecord::Base
  validates :name, :presence=>true
  validates :title, :presence=>true
  has_many :comments
  belongs_to :blogger
  belongs_to :topic,    :touch => true
  accepts_nested_attributes_for :blogger
  attr_accessible :name, :title, :content
end

我在帖子#index中出现“NoMethodError”错误,其中包含

nil的未定义方法`post':NilClass并在提取的源代码中包含index.htm.erb的代码

3 个答案:

答案 0 :(得分:2)

不是答案,只是一些指导原则:

您的问题代码中存在很多错误。

@blogger = blogger.find(params[:id])

我认为应该改为

@blogger = Blogger.find(params[:id])

在下一步做一个

raise @blogger.inspect

并查看是否已加载。

在您看来,您可以做得更好: (顺便说一句:如果你有show方法,它需要被称为show.html.erb而不是index.html.erb)

#show html.erb

<%=render @blogger.posts %>

然后在posts / _post.html.erb

中创建一个文件
<%= post.name %>
<%= render post.comments %>

以及您在其中呈现评论的文件comments/_comment.html.erb

这是干嘛的方式!

答案 1 :(得分:0)

也许是因为您将此代码放在index.html.erb中 因此,当您尝试显示此HTML页面时,rails将尝试在控制器中调用方法索引,但您没有任何名为index的方法。 尝试将此代码放在名为index /的方法中,或尝试将html.erb文件的名称更改为show.html.erb

编辑:所以,在您的代码中传递@posts变量,但在您的视图中,您调用了@ blogger.post。 它不应该被解决。您必须选择将@blogger或@posts传递给视图,并且只使用传递给视图的变量的属性。

答案 2 :(得分:0)

您正在寻找的错误是一个简单的拼写错误,在您看来,您应该写

@blogger.posts.each

而不是

@blogger.post.each

希望这有帮助。