如何在Rails中的页面内执行操作而不呈现新页面

时间:2013-02-13 16:41:06

标签: ruby-on-rails

在我的rails应用程序中,我正在尝试添加一个联系人用户弹出框,用于向用户发送电子邮件。

我有javascript来显示弹出窗体,这本身就是一个部分。

当用户点击联系表单上的提交时,它会调用一个传递邮件的控制器操作。提交消息后,我想保持在同一页面上,但隐藏弹出框。我的问题是,我无法获得传递邮件的控制器操作,而不是呈现自己的视图。我试过了

render nothing: true

但这只是呈现一个空白页面。

我的表单设置如下

= form_tag({:controller => 'users', :action => 'contact_user'}, :method => 'put') do 

在我的路线配置中我有

resources :users
  collection do
     put 'contact_user'
  end

1 个答案:

答案 0 :(得分:8)

如果您通过AJAX提交表单,则可以执行您要执行的操作。

在表单中添加:remote => true即可完成此操作:

= form_tag({:controller => 'users', :action => 'contact_user'}, :method => 'put', :remote => true) do 

现在,表单提交将作为AJAX请求命中您的控制器。然后你应该能够像你建议的那样渲染任何东西,甚至做渲染.js.erb之类的东西来执行一些Javascript(比如隐藏你正在谈论的弹出窗口)。