2016-01-20 87 views
0

我有一個Ruby的形式保存價值的城市ID:Ruby代碼Javascript中

= select_tag 'building[city_id]', 
options_for_select(cities.map{|c| [c.name, c.id]}) 

我節省使用Javascript該ID:

var city_id = $('#building_city_id').val(); 

我的問題是,我還需要一個JavaScript可變的城市名稱,我可以像這樣使用Ruby:City.find(@building.city.id).name。 我試過這個代碼,但它不wotk:

var city_name = #{City.find(city_id).name}; 

哪裏是我的錯? (我對Ruby很新)

+0

您無法在瀏覽器中運行JavaScript來調用Ruby。你是否試圖在ERB中運行Ruby或者在Rails中運行模板處理器? –

回答

1

它不起作用,因爲Rails服務器在定義city_id之前解析html.erb視圖。

city_id是接收包含var city_name = #{City.find(city_id).name};視圖之後,由客戶端瀏覽器定義的JavaScript變量。

您可以執行一個Ajax調用,在服務器上執行City.find(city_id).name,並填寫var city_name與響應。一旦你知道用戶已經使用一些文本,你可以使用(即city_id)填補了一個input,你可以像這樣的調用(把這個無論是在視圖或在一個單獨的js文件):

$.ajax({ 
    type: "GET", 
    url: "/your_ajax_endpoint", 
    dataType: 'json', 
    data: {'city_id': city_id}, 
    success: function(data) { 
    var city_name = data; 
    }, 
    error: function(data) { 
    // Error handling 
    } 
}); 

的您的控制器端點如下所示:

def my_ajax_endpoint 
    city_name = City.find(city_id).name 
    respond_to do |format| 
     format.json { render json: city_name.to_json } 
    end 
end 
+0

任何想法如何在用戶填寫表單時獲取城市名稱?我需要一個城市名稱來顯示Google地圖上的建築物。我在哪裏做Ajax呼叫? – Zelenka

+0

@Nadiya與ajax。我用一個例子編輯了我的答案。 – brito

0

您需要使用javascript傳遞數據。這裏是一個從this RailsCast取得的例子。

產品/ index.html.erb

<%= content_tag "div", id: "products", data: {products: Product.limit(10)} do %> 
    Loading products... 
<% end %> 

應用程序/資產/ Java腳本/ products.js.coffee

jQuery -> 
    alert $('#products').data('products') 

或者你可以使用gon gem