2015-06-13 62 views
0

我試圖重寫下面的按鈕代碼,以便不是將我重定向到show頁面,而是創建對象並保持顯示當前頁面。我想重寫一個button_to

<div class="colors"> 
    <li class="colors" id="greys"> 
     <%= button_to "some text", votes_path(color: 'grey', kid_id: current_kid, scoop_id: scoop.id, :method => :create), class: 'grey color-button' %> 
    </li> 
</div> 

回答

0

首先,有一些id爲您的按鈕:

<%= button_to "some text", votes_path(color: 'grey', kid_id: current_kid, scoop_id: scoop.id, :method => :create), class: 'grey color-button' id: 'buttonID' %> 

,然後在你的JavaScript代碼,只要點擊按鈕時,向服務器發送一個請求,創建新的記錄,然後更新當前頁面,以便它顯示記錄已被創建。

我會告訴你如何做到這一點的雕塑:

$("buttonID").click(function() { 
    $.ajax({ 
     url: "some_url" // Your URL, for example, /votes 
     type: "POST", // The type of request 
     data: { color: "grey" } // Send data to server in this format 
     success: function() { 
      // Here you can update the page so that the user could 
      // know the data has been posted, and no need to press 
      // the button again 
     } 
    }); 
}); 
3

你應該使用遠程標誌發送通過JavaScript的請求。並可能向用戶提供反饋。

要通過JS發送請求在軌必須添加remote: true到選項哈希:

<div class="colors"> 
    <li class="colors" id="greys"> 
     <%= button_to "some text", votes_path(color: 'grey', kid_id: current_kid, scoop_id: scoop.id, :method => :create), class: 'grey color-button', remote: true %> 
    </li> 
</div> 

在你的控制器,你可以通過respondig到js的

#votes controller 
def create 
    # ... 
    respond_to do |format| 
    format.js render 
    end 
end 

在做特別響應您的create.js.erb你可以用嵌入式ruby編寫javascript代碼來給出響應。你甚至可以在這裏渲染部分。

alert('create.js.erb') 
相關問題