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错误.非常感谢您的帮助
使用get或match在路由中时,需要定义映射的控制器方法
get 'locations/value', to: 'locations#value'
Run Code Online (Sandbox Code Playgroud)
更新
更新路由后,您看到了同样的错误.这个错误有两个原因:
你resources :location最初定义了.url locations/exists本身匹配资源中的"show"方法,Routes 'exists'作为id #show.
您尚未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)
通过这一切,你所有的资源和"存在"都可以存活.
| 归档时间: |
|
| 查看次数: |
3615 次 |
| 最近记录: |