我正在尝试在博客应用程序中显示评论者和评论体模型。但它没有显示。 这是注释控制器的代码。
class CommentsController < ApplicationController
http_basic_authenticate_with :name => "dhh", :password => "secret", :only => :destroy
def create
@post=Post.find(params[:post_id])
@comment=@post.comments.create(params[:comments])
redirect_to post_path(@post)
end
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
def check
@comment=Comment.all
end
end
//评论模型
class Comment < ActiveRecord::Base
belongs_to :post
attr_accessible :body, :commenter
end
//发布模型
class Post < ActiveRecord::Base
attr_accessible :content, :name, :title, :tags_attributes
validates :name, :presence=>true
validates :title, :presence=>true,
:length=>{:minimum=>5}
has_many :comments, :dependent=>:destroy
has_many :tags
accepts_nested_attributes_for :tags, :allow_destroy => :true,
:reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end
//评论视图
<p>
<b>Commenter:</b>
<%= comment.commenter %>
</p>
<p>
<b>Comment:</b>
<%= comment.body %>
</p>
<p>
<%= link_to 'Destroy Comment', [comment.post, comment],
:confirm => 'Are you sure?',
:method => :delete %>
</p>
//发布视图
<p id="notice"><%= notice %></p>
<p>
<b>Name:</b>
<%= @post.name %>
</p>
<p>
<b>Title:</b>
<%= @post.title %>
</p>
<p>
<b>Content:</b>
<%= @post.content %>
</p>
<p>
<b>Tags:</b>
<%= join_tags(@post) %>
</p>
<h2>Comments</h2>
<%= render @post.comments %>
<h2>Add a comment:</h2>
<%= render "comments/form" %>
<br />
<%= link_to 'Edit Post', edit_post_path(@post) %> |
<%= link_to 'Back to Posts', posts_path %> |
请解决此问题。
答案 0 :(得分:0)
<%= render @post.comments %>
不正确。您必须渲染部分而不是对象。
我认为views/comments
中的评论视图名为show.html.erb
。尝试类似的东西:
<%= @post.comments.map do |comment| %>
<%= render 'comments/show', comment: comment %>
<%= end %>
UPD:我的错误:这是正确的,在评论中有描述。
答案 1 :(得分:0)
您称之为“评论视图”的文件是哪个?能够像这样呈现一个集合
<%= render @post.comments %>
您需要将评论模板发布到views/comments/_comment.html.erb
当然你可以把它放到另一个部分,例如'posts / _comment.html.erb`但是你必须更加明确:
<%= render :partial => 'posts/comment', :collection => @post.comments %>
(请注意文件名中有下划线,但不能传递给渲染的'部分路径')