我对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的代码
答案 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
希望这有帮助。