ajax从rails控制器获取数据

Qua*_*ico 1 ajax ruby-on-rails

我正在尝试使用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);
  }
});
Run Code Online (Sandbox Code Playgroud)

在我的控制器中我有

  def exists
    location_exists = true
    respond_to do |format|
      format.html
      format.json {render json: location_exists }
    end
  end
Run Code Online (Sandbox Code Playgroud)

以后的值将进入模型中的一个方法,该方法将查询DB并返回true/false.

在我的路线我有

  resources :locations 
  get 'locations/exists', to: 'locations#exists'
Run Code Online (Sandbox Code Playgroud)

此代码导致以下错误

The action 'show' could not be found for LocationsController
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*han 6

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

get 'locations/value', to: 'locations#value'
Run Code Online (Sandbox Code Playgroud)

更新

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

  1. 你resources :location最初定义了.url locations/exists本身匹配资源中的"show"方法,Routes 'exists'作为id #show.

  2. 您尚未show在LocationsController中定义

所以,路线将首先URL映射到locations#show与:id作为'exists',然后点击控制,发现#show不存在.

更新后的解决方案

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

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

resources :locations do
  collection do
    get 'exists'
  end
end 
Run Code Online (Sandbox Code Playgroud)

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