在不重定向的情况下调用 ruby action/method
Calling a ruby action/method without redirecting
我在 ConversationsController 中有一个名为 new
的操作。我也有一个视图,new.html.erb
,其中包含以下内容:
<%= button_to "New", action: "save_it" %>
在 ConversationsController 中,我还有一个操作,save_it
,它正在对 Redis 数据库执行一些操作。
这里一切正常。当我点击按钮时,save_it
动作是 运行 并且 Redis 数据库动作也成功发生。
问题是我被重定向到 save_it.html.erb
。有什么方法可以调用 save_it
,比如只执行数据库命令而不重定向到其他任何地方?
您可以使用 remote:true 条件调用它,使其成为 ajax 调用。它将尝试在不重新加载页面的情况下加载 save_it.js.erb。
<%= button_to "New", action: "save_it", remote: true %>
我想通了...我把我的 save_it
动作放在
/app/helpers/conversations_helper.rb
而不是
/app/controllers/conversations_controller.rb
所以现在 save_it
是 conversations_helper.rb 中的常规方法。这可以通过创建一个普通的 HTML 按钮
从 new.html.erb 调用
<input type="button" onclick=" <%= save_it -%> " value="save" />
您可以通过控制器操作实现:
def save_it
# do stuff
render nothing: true
end
我想,这样就可以了。
我在 ConversationsController 中有一个名为 new
的操作。我也有一个视图,new.html.erb
,其中包含以下内容:
<%= button_to "New", action: "save_it" %>
在 ConversationsController 中,我还有一个操作,save_it
,它正在对 Redis 数据库执行一些操作。
这里一切正常。当我点击按钮时,save_it
动作是 运行 并且 Redis 数据库动作也成功发生。
问题是我被重定向到 save_it.html.erb
。有什么方法可以调用 save_it
,比如只执行数据库命令而不重定向到其他任何地方?
您可以使用 remote:true 条件调用它,使其成为 ajax 调用。它将尝试在不重新加载页面的情况下加载 save_it.js.erb。
<%= button_to "New", action: "save_it", remote: true %>
我想通了...我把我的 save_it
动作放在
/app/helpers/conversations_helper.rb
而不是
/app/controllers/conversations_controller.rb
所以现在 save_it
是 conversations_helper.rb 中的常规方法。这可以通过创建一个普通的 HTML 按钮
<input type="button" onclick=" <%= save_it -%> " value="save" />
您可以通过控制器操作实现:
def save_it
# do stuff
render nothing: true
end
我想,这样就可以了。