2014-10-08 63 views
0

我想讓我的評論與ajax保存,以便頁面不重新加載。這是迄今爲止我所做的,但它不起作用。如何獲得工作在Rails上的Ajax評論4

我該如何得到這個工作?

在我看來,文件

<%= form_for [@book, inspiration, @comment], :html => { :class => "comment-form" } do |f| %> 
<%= f.text_field :content, placeholder: "Add a comment & hit enter.", :id => 'comment_submit' %> 
<% end %> 

此外,在該文件中,我已經包括此:

<script> 
$(document).on('keypress', '#comment_submit', function(event) { 
    if (event.which == 13) { 
    event.preventDefault(); 
    var myData = $("form").serialize(); 
      $.ajax({ 
       type: "POST", 
       data: myData, 
       url: <%= inspiration_comments_path(inspiration) %>, 
       success: function(data){ 
      if(data){ 
        alert('success') 
      } 
      }   
    }); 
    } 

    }); 
</script> 

的意見都應該按唯一的回車鍵提交。沒有按鈕。

另一個難度等級,這些評論是關於書籍。這些書都顯示在頁面上,當你點擊一本書時,它會通過評論部分提供一個關於它的信息的模式。我試着給id選擇器一個動態名稱,但是這並沒有改變任何頁面加載。

感謝您的幫助。

回答

1

Rails有built in support for Ajax。您不必編寫自己的jQuery來提交評論。使用remote: true選項與form_for和Rails將爲您處理它。但是,您必須編寫JavaScript處理程序,並確保您的控制器使用JavaScript進行響應。

例如:

<%= form_for [@book, inspiration, @comment], remote: true do |f| %> 
# ... 

然後,你的控制器將有這樣的事情:

def create 
    @comment = Comment.new(comment_params) 
    @comment.save 
    respond_to do |format| 
    format.html # default without js 
    format.js # make sure you have a create.js.erb that will handle updating the dom 
    end 
end 

那麼你將要創建一個comments/create.js.erb處理程序。例如,此處理程序將具有處理更新dom所需的JavaScript,例如插入註釋。

查看Rails Guides瞭解更多信息。

+0

謝謝!現在提交數據,我只需要讓處理程序正常工作即可。 – user1573016 2014-10-08 21:56:02

+0

這很奇怪,但以下代碼適用於Windows版Chrome,但不適用於Mac版Chrome。任何想法爲什麼不呢?謝謝。 $('#comment_submit')。val(''); $('#comment_submit')。attr('placeholder','Add a comment&hit enter。'); $('#comments')。html('<%= escape_javascript(render @comments)%>'); – user1573016 2014-10-10 21:01:26

+0

有點難以說沒有錯誤/控制檯,和更多的代碼。僅供參考,如果您嘗試更改提交按鈕的行爲,Rails也涵蓋了您。 'f.submit「提交評論」,數據:{'disable-with'=>「等等......」}' – Mohamad 2014-10-10 22:15:09