2014-06-09 13 views
1

我正在爲我的一個小項目使用gmap4rails。我想從用戶的當前位置傳入緯度和經度值,並將這些值設置爲我的稱爲Pet的模型。寵物模型屬於用戶模型,用戶模型有許多寵物。我希望能夠在創建新寵物時做到這一點,以便寵物收養信息具有座標。如何將javascript變量傳入Rails控制器?

我明白,對於AJAX請求,它需要一個url來了解應該採用哪條路徑。由於寵物屬於模型,我不知道如何將路徑添加到url參數中。我做了一個耙路線,看看要使用的路線和理想,我應該使用哪一個是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 

Pet_controller創建DEF:在控制檯

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文件嗎?我想,也許我可以嵌入我從耙了航線路線...

+0

你目前的網址是? – Santhosh

+0

url:「users/pets」 – user3701329

+0

執行過程中有一些錯誤。點擊有2個POST請求'POST http:// localhost:3000/users/1/pets/users/pets 404(Not Found)'和 'POST http:// localhost:3000/users/1/pets 500 ' – Santhosh

回答

0

難道我複製到URL,因爲它是還是我需要以某種方式獲得與JS user_ID的?

如果您在控制檯中讀取了您在發佈結束時包含的錯誤,則會看到您發送了兩個AJAX請求。像Santosh在評論中說,你應該找出原因並解決這個問題。爲了解釋這些錯誤,第一個被髮送給users/1/pets/users/pets,因爲你的ajax調用的url選項被設置爲'users/pets',這會將其添加到默認路由中,並且該路由不會存在(因此404)。第二個AJAX請求被髮送到正確的URL,但返回500錯誤。如果你看看你的服務器控制檯,你會看到一條消息。 (提示:無論何時瀏覽器控制檯報告500 (Internal Server Error),請查看您的服務器終端或日誌以瞭解詳細信息。)

您的其他代碼也有一些問題。首先,你已經在你的模型中定義了setCoords作爲類方法(使用self.setCoords),但是在你的控制器中,你正在對該類的一個實例(@pet)調用它。當程序到達該行時,這將導致NoMethodError。要解決此問題,請從方法定義中刪除self,以便它只讀setcoords(lat, lon)

其次,控制器是否將路由AJAX調用的操作實際接受AJAX請求?你需要有一個這樣的塊:

respond_to do |format| 
    format.html 
    format.js { 
    # do stuff 
    } 
end 

如果是創建一個處理請求的動作,則需要以上塊,也是create.js.erb文件(默認) ,它將包含JavaScript代碼發送回瀏覽器以刷新頁面的狀態。

相關問題