2

我在我的页面上实现了一个类似 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 %>

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

评论.html.erb

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

1 回答 1

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} %>');

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

请注意,我为此使用 jQuery。#comments_container 是您要放置评论的 div

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

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

注意3:我为评论命名,#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 ,仅此而已..

于 2013-04-09T06:50:49.633 回答