2013-03-26 4 views
0

Я пытаюсь отобразить модель комментария и тела комментариев в приложении для блога. Но он не отображается. Вот код контроллера комментариев.комментарии не отображаются в ruby ​​on rails blog application

class CommentsController < ApplicationController 

    http_basic_authenticate_with :name => "dhh", :password => "secret", :only => :destroy 

    def create 
    @post=Post.find(params[:post_id]) 
    @[email protected](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

, на котором вы дадите комментарий, покажите код для этого PLS ... –

+0

Жаль, что я не получил вас. Пожалуйста, объясните подробно, потому что я новичок в рубине на рельсах. – lurch123

+0

Я имею в виду действие show Commentcontroller. –

ответ

0
<%= render @post.comments %> 

является неправильным. Вы должны отображать частичные, а не объекты.

Я буду думать, что ваш комментарий комментариев в views/comments называется show.html.erb. Попробуйте что-то вроде этого:

<%= @post.comments.map do |comment| %> 
    <%= render 'comments/show', comment: comment %> 
<%= end %> 

UPD: Моя ошибка: это правильно, описание в комментариях.

+0

Алекс Теут, что даст вам **@post.comments.map**? –

+0

'<% = render @ post.comments%>' абсолютно прав, если у вас есть частичный 'views/posts/_comment.html.erb'. Он выполнит [сборку] (http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections). – khustochka

+0

@maximus, итерация над комментариями. –

0

Какой файл является тем, что вы называете «комментарием»? Для того, чтобы быть в состоянии вынести коллекцию как этот

<%= render @post.comments %> 

вам нужно разместить комментарий шаблон views/comments/_comment.html.erb

Конечно вы можете поместить его в другой частичный, например, «Сообщения/_comment.html.erb`, но тогда вы должны быть более четко:

<%= render :partial => 'posts/comment', :collection => @post.comments %> 

(Разум есть подчеркивание в имени файла, но не в„частичном пути“, переданный визуализацию)

Смежные вопросы