2013-03-10 51 views
2

我實現了像我的網頁上的評論像Facebook,但我想弄清楚如何讓視圖工作。如何創建評論視圖? 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 %> 
+0

理想情況下,我想要顯示的評論就像我現在使用的這個頁面上的顯示 – 2013-03-10 22:44:20

+1

您需要使用javascript http://wowkhmer.com/2011/09/19/unobtrusive -ajax-with-rails-31 /如果你使用Rails 3.2或Rails 4 http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html – rbinsztock 2013-03-12 18:43:56

回答

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 

改變你的形式來支持Ajax

<%= 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 %> 

然後編輯你的觀點有點

評論/意見.html.erb

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

和部分將

_comment.html.erb

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

然後在評論/ create.js.erb做

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

代替的前置,你可以做任何你想要的動畫。你也可以追加,這取決於你想如何分類你的評論

note我正在使用jQuery。 #comments_container是希望把意見

注意的div create.js.erb基本上是爲創造評論控制器動作,因此它可以訪問任何變量,創建操作有JS視圖

注2:我使用Ruby 1.9的散列格式

注3:我命名的評論#comment-<%= comment.id %>所以你可以,如果你想刪除它或它的工作其他方式日後訪問,例如

def destroy 

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

respond_to do |format| 
format.js 
end 
end 

和然後在d estroy.js.erb做

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

這將刪除該分區

確保有jquery_ujs和jQuery寶石/文件和這差不多吧..