Rails - 从javascript调用控制器

时间:2014-09-11 13:34:46

标签: javascript ruby-on-rails ruby

极端轨道在这里很棒。 我试图从一个javascript文件中对一个控制器进行一个简单的调用而且相当困难,研究表明我需要一个ajax请求。你们能指出我正确的方向吗?

这是我的控制器 - 它只返回一个布尔值

class ReferredFriend < ActiveRecord::Base

def refer_email_exists(email)
/return a boolean

这是我的javascript - 明显不正确的语法,但你得到我的一般想法

if ReferredFriend.refer_email_exists(message.get('to_email')) == 'true'
  alert "That email already exists!"

到控制器的路线是:app / models / referenced_friend.rb

我把它放在我的路线文件中,但是我猜这也是不正确的

resources :referred_friends do
  get :refer_email_exists
end

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

你想要的方法就是对你的路线进行ajax调用,例如:

$.ajax({
  url: "<url route to refer_email_exists>",
  success: function(result){
  // check result then
  alert "That email already exists!"
  }
});

答案 1 :(得分:0)

简单的AJAX调用怎么样?

$.ajax({
    url: Routes.test_email_path(email),
    type: 'POST'
}).done(function (data) {
    // handling success
}).fail(function (data) {
    // handling failure
}   

路线来自js-routes gem。

答案 2 :(得分:0)

Rails为远程操作提供按钮短代码,例如调用Rails控制器操作VIA AJAX。来自Rails文档http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#link-to

  

link_to是帮助生成链接的助手。它有一个:remote选项,您可以这样使用:

     

<%= link_to "an article", @article, remote: true %>

     

生成:

     

<a href="/articles/1" data-remote="true">an article</a>

     

您可以使用form_for绑定到相同的Ajax事件。这是一个例子。假设我们有一个文章列表,只需点击一下即可删除。我们会生成一些像这样的HTML:

     

<%= link_to "Delete article", @article, remote: true, method: :delete %> and write some CoffeeScript like this:

     

$ -> $("a[data-remote]").on "ajax:success", (e, data, status, xhr) -> alert "The article was deleted."