【发布时间】:2014-06-09 05:30:16
【问题描述】:
我正在为我的一个小项目使用 gmap4rails。我想从用户当前位置传入纬度和经度值,并将这些值设置到我的模型中,称为 Pet。宠物模型属于用户模型,用户模型有很多宠物。我希望能够在创建新宠物时执行此操作,以便宠物收养信息具有坐标。
我了解对于 AJAX 请求,它需要一个 url 来了解它应该采用哪条路径。由于宠物属于模型,因此我不确定如何将路径添加到 url 参数中。我做了一个 rake routes 来查看要使用哪个路由,理想情况下我应该使用 POST 路由:
/users/:user_id/pets(.:format)
我是按原样将其复制到 url 中,还是需要以某种方式使用 js 获取 user_id?
到目前为止,我已经创建了一个如下所示的 js 文件:
var lat;
var lon;
$(document).ready(function() {
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setLatLon);
}
function setLatLon(position) {
lat = position.coords.latitude;
lon = position.coords.longitude;
}
//function for logging in and passing lat and lon to the controller
$(function() {
$("#save").click(function() {
//create ajax request
console.log("creating ajax request")
$.ajax({
type: 'POST',
url: "users/pets",
data: 'lat=' + lat + '&lon=' + lon
})
});
});
});
宠物模型:
class Pet < ActiveRecord::Base
belongs_to :user
validates :name, presence: true
validates :species, presence: true
validates :breed, presence: true
validates :description, presence: true
def self.setCoords(lat, lon)
self.lat = lat
self.lon = lon
end
end
宠物控制器创建定义:
def create
@user = User.find(params[:user_id])
@pet = @user.pets.create(pet_params)
@pet.setCoords(params[:lat], params[:lon])
if @pet.save
redirect_to user_path(@user)
else
render 'new'
end
end
控制台出错:
creating ajax request getCoords.js?body=1:17
POST http://localhost:3000/users/1/pets/users/pets 404 (Not Found) jquery.js?body=1:9667
POST http://localhost:3000/users/1/pets 500 (Internal Server Error) jquery.js?body=1:9667
尝试将 js 文件保存为 js.erb 文件会更好吗?我想也许我可以嵌入我从 rake 路线中得到的路线......
【问题讨论】:
-
您当前所在的网址是什么?
-
实现有一些问题。单击时有 2 个 POST 请求
POST http://localhost:3000/users/1/pets/users/pets 404 (Not Found)和POST http://localhost:3000/users/1/pets 500 -
第二个请求确实到达了服务器,但是代码有错误
标签: javascript ruby-on-rails ajax gmaps4rails