2017-01-02 47 views
2

我有一個窗體,當用戶在文本字段中輸入一些值我想自動填充其他字段,但它一直返回SystemStackError(堆棧級別太深)。這是文件:SystemStackError(堆棧級別太深)當jQuery ajax後

的routes.rb

scope :places, controller: :places, as: :places do 
    post :postcode, action: :postcode, as: :postcode 
end 

form.html.erb

<form> 
    <input type="text" class="input_postcode"> 
    <input type="text" class="input_state"> 
</form> 

main.js

$(document).on('change', ".input_postcode", function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    var postcode = $(this).val(); 
    $.post('places/postcode', { postcode: postcode }, function(data) { 
     $(".input_state").val(data.state); 
     return false; 
    }, 'json'); 
    return false; 
}); 

places_controller.rb

def postcode 
    place = Place.where(postcode: postcode).first 
    state = place.state.name 
    respond_to do |format| 
     format.js { render json: { state: state } } 
    end 
end 

我得到這個結果在控制檯:

SystemStackError (stack level too deep): 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    app/controllers/places_controller.rb:4:in `postcode' 
    (keeps going the infinite loop...) 

在places_controller線4是place = Place.where(postcode: postcode).first線。

我不知道我做錯了什麼。希望可以有人幫幫我!

回答

1

你得到SystemStackError (stack level too deep),因爲你的動作名稱是postcode而你的對象變量名稱/方法也被命名爲postcode

place = Place.where(postcode: postcode).first 

的錯誤,當你在postcode屬性傳遞,因爲它具有相同的名稱的方法/動作發生。

要修復錯誤,請重命名操作和路由名稱。

+0

非常誠實的錯誤。非常感謝! – Bengala

相關問題