Rails:如何使用按钮执行功能而不重新加载页面

时间:2014-04-14 02:14:49

标签: javascript jquery ruby-on-rails ruby

好吧也许以前有人问过这个问题,但我无法找到问题的正确答案...... 我有一个表使用每个/ do收取数据,表中的每个项都有一个按钮,将该项添加到另一个表中,该表应该在同一页面中看到,但在第一个表之上。 当我点击按钮时,它会执行操作,但问题是重新加载页面。 如果不重新加载页面并实时进行更改,我该怎么做才能执行此操作?

2 个答案:

答案 0 :(得分:4)

您必须使用Ajax。由于您没有提供任何代码,我将为您提供伪代码来描述这个想法。

在控制器中创建描述您的行为的操作。此操作必须响应JS。

def do_something
  do_stuff
  respond_to do |format|
    format.html { #handle HTML, i.e. full page reload }
    format.js # handle ajax request
  end
end

然后,您需要创建一个js模板来渲染您的操作结果。您将呈现JavaScript。因此,创建一个名为do_something.js.erb的模板。该模板将具有JavaScript代码来实现您描述的行为以及任何Ruby代码。

不要忘记为您的行动创建路线。此外,根据您希望如何实现该方法,您需要将远程选项传递到表单或链接。如果您使用的是链接,则还需要传递method选项。

例如:

= form_for @object, remote: true

或者

= link_to "Do Something", do_something_path, remote: true, method: :patch # or post, or put

答案 1 :(得分:1)

您可以使用 ajax 来实现这一目标。您可以自己编写js代码,所有这些都是通过使用按钮的remote: true选项完成的。如果您使用remote: true选项,rails会发送一个ajax请求,而您的响应应该是js。

示例:

respond_to do |format|
  format.html
  format.js # this one handle the request comes from `remote: true` button
end