ajax从rails控制器获取数据

时间:2013-11-23 17:15:32

标签: ruby-on-rails ajax

我正在尝试使用ajax从我的控制器获取信息。基本上我想知道数据库中是否已存在数据,因此我的控制器将返回true或false。 目前我只是想设置基本的ajax调用

在我的js文件中,我有以下ajax调用,因为你现在可以看到我并没有真正做任何逻辑,因为我的数据只是一个占位符。稍后我将添加我想要查询的信息

$.ajax({
  type: "GET",
  url: "/locations/exists",
  dataType: "JSON",
  data: { 'locition_exist': loc_exit },
  success: function(data) {
    console.log(data);
  }
});

在我的控制器中我有

  def exists
    location_exists = true
    respond_to do |format|
      format.html
      format.json {render json: location_exists }
    end
  end

以后的值将进入模型中将查询DB并返回true / false的方法。

在我的路线中我有

  resources :locations 
  get 'locations/exists', to: 'locations#exists'

此代码导致以下错误

The action 'show' could not be found for LocationsController

我是rails和ajax的新手,我将我的代码基于我在这里阅读的不同示例,所以我可能只是做了一个愚蠢的noob错误。 非常感谢你的帮助

1 个答案:

答案 0 :(得分:6)

在路由中使用getmatch时,需要定义映射的控制器方法

get 'locations/value', to: 'locations#value'

<强>更新

更新路线后,您看到了同样的错误。这个错误有两个原因:

  1. 您最初定义了resources :location。网址locations/exists本身与资源中的“show”方法匹配,路由将'exists'作为#show中的ID。

  2. 您尚未在LocationsController

  3. 中定义show

    因此,路线首先将网址映射到locations#show:id'exists',然后点击控制器,发现#show不存在。

    更新后的解决方案

    当然你可以把get 'exists'...放在资源之前,但看起来很难看。

    由于'exists'不需要id,因此它是一种集合方法。所以你可以使用Routes内置的方法来做到这一点。

    resources :locations do
      collection do
        get 'exists'
      end
    end 
    

    通过这一切,你所有的资源和'存在'都可以存活。