我正在创建一个网站博客,并且不知道我将如何在博客中添加评论。有没有宝石或技巧?你能帮助我并给我一些提示吗?
答案 0 :(得分:2)
没有"技巧" - 您只需像应用程序的其余部分一样对其进行编码。
<强>协会强>
由于您的comments
将与posts
直接关联,因此首先要查看两个模型之间的关联:
#app/models/comment.rb
Class Comment < ActiveRecord::Base
belongs_to :post
end
#app/models/post.rb
Class Post < ActiveRecord::Base
has_many :comments
end
这种关联的重要性在于,如果你想创建评论,虽然它们是他们自己的个人对象,但他们必须被捆绑并且#34;&#34;到一个帖子。这一点的重要性在于Ruby / Rails的object-orientated
性质:
-
<强> OOP 强>
大多数人都没有意识到,由于Ruby是一种面向对象的语言,Rails也是一个面向对象的框架。
这意味着您需要构建围绕对象的方法,操作等。大多数初学者认为你只需要创造一个“逻辑”的逻辑。应用流程 - 而现实是你需要构建你的应用围绕你想要服务的对象
-
<强>资源强>
除此之外,您还需要考虑如何与应用程序中的资源/对象进行交互。我建议使用nested resources
来执行此操作:
#config/routes.rb
resources :posts do
resources :comments #-> domain.com/posts/5/comments/new
end
这一点很重要的原因在于你可以用它创建一个comment
:
#app/controllers/comments_controller.rb
Class CommentsController < ApplicationController
def new
@post = Post.find params[:post_id]
@comment = Comment.new
end
def create
@post = Post.find params[:post_id]
@comment = Comment.new(comment_params)
end
private
def comment_params
params.require(:comment).permit(:comment, :params, :post_id)
end
end
这允许您使用以下内容:
#app/views/comments/new.html.erb
<%= form_for [@post, @comment] do |f| %>
<%= f.text_field :comment_attributes %>
<%= f.submit %>
<% end %>
这将帮助您创建comment
个对象作为所需post
个对象的子对象 - 让您能够为每个帖子创建评论。
<强>加成强>
此处的奖励是,如果您想nest
您网站上的评论,那么您将要使用Ancestry
gem,如下所示:
这样做的方法相对简单。如果您设置了评论创建系统,如上所述,您需要将ancestry
gem添加到Comment
模型中:
#app/models/comments.rb
Class Comment < ActiveRecord::Base
has_ancestry
end
您需要将ancestry
列迁移到comments
数据表,然后才能填充ancestry
属性:
然后,您可以使用以下部分以tree
方式显示评论:
#app/views/comments/_tree.html.erb
<ol class="categories">
<% collection.arrange.each do |category, sub_item| %>
<li>
<div class="category">
<%= link_to category.title, edit_admin_category_path(category) %>
</div>
<!-- Children -->
<% if category.has_children? %>
<%= render partial: "category", locals: { collection: category.children } %>
<% end %>
</li>
<% end %>
</ol>
然后您可以按如下方式调用它:
<%= render partial: "comments/tree", locals: { collecton: @comments } %>
答案 1 :(得分:0)
您可以实施外部评论引擎,例如Disqus,或者通过制作与您的帖子有关系的评论资源将其保留在内部,例如
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
通过这种方式,您可以正确地处理评论。
它需要一些其他工作,控制器,观点......但精神就在那里。