2011-08-30 57 views
14

我的設置:Rails的3.0.9,1.9.2紅寶石和jQuery 1.6.2jQuery的崗位到Rails

我有一個表格,顯示多張照片和評論的用戶,我希望實現在線評論。

<div id="newsfeed">  
<div> 
<div class="photo_title">Summer 2011</div> 
<div class="newsfeed_photo"> 
<a href="..." /></a> 
</div> 
<textarea class="comment_box">Write a comment...</textarea> 
</div> 
<div> 
<div class="comment_title">Seeing a movie</div> 
<textarea class="comment_box">Write a comment...</textarea> 
</div> 

我想在用戶點擊textarea字段中的回車鍵時提交一個AJAX帖子。下面是JavaScript的(不完全)是我迄今爲止

$('#newsfeed').delegate('.comment_box', 'keydown', function (event){ 
    event.preventDefault(); 
    $.post('/sub_comments', ...); 
    }); 

我使用delegate方法,因爲<div id='newsfeed'>內容可能與其他AJAX調用所取代。我需要的是jQuery post方法的語法,假設我需要傳遞一些形式參數,如說photo_id等。假設我有一種方法來訪問params的值,調用params創建params的語法是什麼Rails的指望他們

下面是標準的Rails位

sub_comments_controller.rb 

    def new 
    @sub_comment = SubComment.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.js 
    end 
    end 

此外,我不希望使用每一個行內註釋我可以添加常用<%= form_for(@sub_comment, :remote => true) do |f| %>。我也看了Ryan Bates的railscast,但代碼看起來過時了。

回答

29

您可以設置您的帖子以任何方式構造數據,只要它在軌道端正確解釋,但最佳做法是使用包含所有值的「模型名稱」對象。

的Javascript

$.ajax({ 
    url: "/sub_comments", 
    type: "POST", 
    data: {subcomment: { 
      field: val, 
      field2: val, etc... }}, 
    success: function(resp){ } 
}); 

Rails的

def create 
    @sub_comment = SubComment.new params['subcomment'] 
    if @sub_comment.save 
    render :json => { } # send back any data if necessary 
    else 
    render :json => { }, :status => 500 
    end 
end 
+1

,你會介意解釋你爲什麼選擇不使用'respond_to'塊嗎?謝謝! –

+0

真的很有幫助,你節省了我的時間,@ cmpolis,非常感謝 –

+2

@MarioZigliotto他這樣做只是因爲它寫得更短。結果是他無法在這個動作中呈現html,只有json。 – DonPaulie