我正在尝试使用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错误。 非常感谢你的帮助
答案 0 :(得分:6)
在路由中使用get
或match
时,需要定义映射的控制器方法
get 'locations/value', to: 'locations#value'
<强>更新强>
更新路线后,您看到了同样的错误。这个错误有两个原因:
您最初定义了resources :location
。网址locations/exists
本身与资源中的“show”方法匹配,路由将'exists'
作为#show
中的ID。
您尚未在LocationsController
show
醇>
因此,路线首先将网址映射到locations#show
,:id
为'exists'
,然后点击控制器,发现#show
不存在。
更新后的解决方案
当然你可以把get 'exists'...
放在资源之前,但看起来很难看。
由于'exists'
不需要id,因此它是一种集合方法。所以你可以使用Routes内置的方法来做到这一点。
resources :locations do
collection do
get 'exists'
end
end
通过这一切,你所有的资源和'存在'都可以存活。