2013-11-23 96 views
1

我想使用ajax从我的控制器获取信息。基本上我想知道数据库中是否已经存在数据,因此我的控制器将返回true或false。 目前我只是想设置基本AJAX调用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 

后面的值将进入一个方法,将查询数据库,并返回真/假模型。

在我的路线我有

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

以下错误

The action 'show' could not be found for LocationsController 

我新的Rails和AJAX这个代码的结果,我根据我读到这里不同的例子我的代码,所以我可能只是在做一个愚蠢的noob错误。 非常感谢您的帮助

回答

6

当使用路线getmatch,您需要定义控制器的方法映射

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

更新

您更新路由后看到了同样的错误。造成此错误的原因有两个:

  1. 您首先定义了resources :location。网址locations/exists本身与资源内的“显示”方法相匹配,路线以'exists'作为#show中的编号。

  2. 您没有内LocationsController

定义show所以,路线将首先映射的URL locations#show:id'exists',然后点击控制,发现#show不存在。

该解决方案的更新

当然,之后你就可以把get 'exists'...资源之前,但看起来丑陋。

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

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

通过这个你所有的资源和'存在'可以生活。

+0

我已更新我的帖子中的代码。这仍然导致相同的错误。 – Quantico

+0

谢谢您的详细解答。我会阅读更多关于收集更好地了解你的建议:) – Quantico

+1

@Quantico,我的荣幸:)你可以在这里阅读文档:http: –