如何创建评论视图? Facebook就像评论一样实施(ruby on rails)

时间:2013-03-10 22:12:49

标签: css ruby ruby-on-rails-3 partial-views

我在我的网页上实施了类似Facebook的评论,但我想弄清楚如何让视图正常工作。

以下是评论如何运作的代码:

评论控制器

class CommentsController < ApplicationController
     def create
    @micropost = Micropost.find(params[:micropost_id])
    @comment = Comment.new(params[:comment])
    @comment.micropost = @micropost
    @comment.user = current_user
    if @comment.save
       redirect_to(:back)
    else
      render 'shared/_comment_form'
    end
  end
end

评论表单视图

<%= form_for([micropost, @comment]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_field :comment_content %>
  </div>
  <button class="btn" type="submit">
    Comment
  </button>
<% end %>

我正在努力弄清楚如何在提交后最好地显示这些评论。我可以用它来构建视图??

comment.html.erb

  <%= simple_format(comment.content) %>
  <% end %>

1 个答案:

答案 0 :(得分:0)

你可以做这样的事情

class CommentsController < ApplicationController
     def create
    @micropost = Micropost.find(params[:micropost_id])
    @comment = Comment.new(params[:comment])
    @comment.micropost = @micropost
    @comment.user = current_user
    if @comment.save
       flag = true
    else
      flag = false
    end

respond_to do |format|
 format.html {flag ? redirect_to(:back) : render 'shared/_comment_form'}
format.js
end

  end
end

将您的表单更改为ajaxified

<%= form_for([micropost, @comment], remote: true) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_field :comment_content %>
  </div>
  <button class="btn" type="submit">
    Comment
  </button>
<% end %>

然后稍微编辑你的视图

评论/ comment.html.erb

<%= render partial: 'comments/comment', locals: {comment: @comment} %>

,部分将是

_comment.html.erb

<div id="comment-<%= comment.id%>">
<%= simple_format(comment.content) %>
  <% end %>
</div>

然后在comments / create.js.erb中执行

$("#comments_container").prepend(' <%=j render partial: "comments/comment", locals: {comment: @comment} %>');

而不是前置,你可以做任何你想要的动画。您也可以附加,具体取决于您希望如何对评论进行排序

注意我正在使用jQuery。 #comments_container是您要放置评论的div

请注意,create.js.erb基本上是评论控制器中创建操作的js视图,因此它可以访问创建操作具有的任何变量

note2:我使用的是ruby 1.9哈希格式

note3:我将评论命名为#comment-<%= comment.id %>,以便您以后可以删除它或以其他方式处理它,例如

def destroy

@comment = Comment.find(params[:id])

respond_to do |format|
format.js
end
end

然后在destroy.js.erb做

$("#comment-<%= @comment.id %>").remove();

将删除该div

确保有jquery_ujs和jquery gem / files,这就是它......