2016-01-20 10 views
0

У меня есть форма Руби, которая сохраняет значение в город ID:рубин код внутри Javascript

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

Я спасаю, что идентификатор с помощью Javascript:

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

Вы не можете вызвать Ruby из JavaScript, запущенного в браузере. Вы пытаетесь запустить Ruby внутри ERB или процессора шаблонов внутри Rails? –

ответ

1

Это не работает, потому что сервер Rails анализирует вид html.erb до city_id.

city_id - это переменная Javascript, определяемая клиентским браузером после, получающая представление, которое содержит var city_name = #{City.find(city_id).name};.

Вы можете сделать вызов Ajax, который будет выполнять City.find(city_id).name на сервере и заполнить var city_name с ответом. После того, как вы знаете, пользователь заполнила input с текстом вы можете использовать (т.е. CITY_ID), вы можете сделать вызов, как так (поставить это либо в представлении или в отдельном 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 %> 

приложение/активы/JavaScripts/products.js.coffee

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

Или вы можете использовать gon gem.

Смежные вопросы