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