0

我正在尝试重写以下按钮代码,而不是将我重定向到show页面,它只是创建对象并保持显示当前页面。

<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>
4

2 回答 2

3

您应该使用远程标志通过 javascript 发送请求。并可能向用户提供反馈。

要在 rails 中通过 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>

在您的控制器中,您可以通过响应 js 来进行特殊响应

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

在您的 create.js.erb 中,您可以编写嵌入 ruby​​ 的 javascript 代码来给出响应。你甚至可以在这里渲染局部。

alert('create.js.erb')
于 2015-06-13T21:59:21.263 回答
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
        } 
    });
});
于 2015-06-13T21:58:06.977 回答