2012-01-21 1 views
0

Скажите, что приложение Rails имеет модель автомобиля и заказа. Модель автомобиля содержит поля имени и цвета. Модель заказа содержит поле car_id и поле цвета, чтобы пользователь мог указать альтернативный цвет, если это необходимо.Как динамически обновлять поле Rail из запроса json?

Когда пользователь создает новый заказ, он может выбрать название автомобиля из поля выбора. Как динамически обновлять текстовое поле с цветом этого события.

Форма заказа содержит поле

<select id="order_car_id></select> 
<input id="order_color"></input> 

Вид Автосалона реагирует на JSon

def show 
    respond_to do |format| 
     format.json { render :json => @car.to_json, :status => 200 } 
    end 
end 

и эта функция реагирует на события и захватывает массив JSON.

$(function(){ 
    $('#order_car_id').live("change", function(e) { 
    e.preventDefault(); 
     $.ajax({ 
     url: "/cars/" + $(this).val(), 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function(data) { 
      $('#order_color').val(car[0].color); 
     }, 
     error: function(xhr,exception,status) { 
      //error functions... 
     } 
     }); 
    }); 
}); 

, но я получаю

Uncaught ReferenceError: car is not defined 

Что такое правильный синтаксис для передачи значения из массива JSON в поле #order_color? Я пробовал различные перестановки $('#order_color').val(car[0].color);, но, похоже, не понял.

Благодарен, если кто-нибудь может указать мне в правильном направлении и узнать, как это работает.

Спасибо!

+0

Посмотрите на параметры от обычного обновления и вашего нового метода AJAX. Есть ли что-то другое? –

ответ

1

Похоже, ваша функция успеха, вы не определяете, какой автомобиль.

Ваша функция передается 'data', но 'car' не определен нигде в этой функции.

Вы не можете извлечь автомобиль из объекта данных.

Сначала добавьте console.log (данные) в вашу функцию успеха, чтобы вы могли видеть структуру ответа данных.

function(data) { 
    console.log(data); 
    //$('#order_color').val(car[0].color); 
} 

Вы, вероятно, получить обратно что-то вроде:

data:{ 
    car:{ 
    color:"blue" 
    size:"large" 
    } 
} 

После того, как вы знаете формат вашего объекта данных, вы можете получить доступ по:

$('#order_color').val(data.car.color); 
+0

спасибо @redronin, что исправил его! –

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