0

目前我正在使用 Rails 创建博客,我想在其中添加评论到帖子模型。我正在使用acts_as_commentable,它在rails控制台上效果很好,但是当我尝试在MVC中实现它时,我很困惑!如何向 Post 模型添加评论。

我该怎么办 ?是否需要创建任何新的控制器来处理评论?

我想在 post->show 视图下方添加评论表单,以便用户可以在 posts#show 页面上添加评论。

对不起我的英语不好 !

4

2 回答 2

2

acts_as_commentable正如保罗建议的那样或polymorphic-association

http://asciicasts.com/episodes/154-polymorphic-association

或在 railscasts 上使用 PRO 帐户:http ://railscasts.com/episodes/154-polymorphic-association-revised (repo:https ://github.com/railscasts/154-polymorphic-association-revised/tree/master/blog -之后

下面对代码进行了一些修改,此代码Post仅允许您在我们加载@commentable时添加评论@commentable = Post.find(params[:id]),如果您将完成教程,您将能够向应用程序中 User 和 Post 共享相同 Comment 模型的任何其他模型添加评论.

acts_as_commentable以前在我的应用程序中使用过,不错的宝石,但我现在正在使用polymorphic-association它,因为它更加可定制。

post.rb

  attr_accessible :content, :name
  has_many :comments, as: :commentable

评论.rb

  attr_accessible :content
  belongs_to :commentable, polymorphic: true

显示.html.erb

<h1>Comments</h1>  

<ul id="comments">  
  <% @comments.each do |comment| %>  
    <li><%= comment.content %></li>  
  <% end %>  
</ul>  

<h2>New Comment</h2>  
<%= form_for [@commentable, @comment] do |f| %> 
  <ol class="formList">  
    <li>  
      <%= f.label :content %>  
      <%= f.text_area :content, :rows => 5 %>  
    </li>  
    <li><%= f.submit "Add comment" %></li>  
  </ol>  
<% end %>

post_controller

def show
  @post = Post.find(params[:id])
  @commentable = @post
  @comments = @commentable.comments
  @comment = Comment.new
end

评论控制器

  def create
    @commentable = Post.find(params[:id])
    @comment = @commentable.comments.new(params[:comment])
    if @comment.save
      redirect_to @commentable, notice: "Comment created."
    else
      render :new
    end
  end

路线.rb

  resources :posts do
    resources :comments
  end
于 2013-05-31T08:56:31.167 回答
1

正如您在acts_as_commentable文档中看到的那样,

还要确保您具有创建数据库结构的迁移。

在您的模型中:

class Post < ActiveRecord::Base
  acts_as_commentable
end

通过您的评论,我看到您正在迈出 Rails 的第一步。您需要创建控制器和视图。在您的控制器中,您需要初始化变量并调用相关视图。我给你的最好建议是,在开始写自己的博客之前,先看看这个 Rails 教程,它将涵盖你需要的大部分方面。

于 2013-05-31T08:15:52.293 回答