2017-01-02 6 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...) 

ライン4 places_controllerにはplace = Place.where(postcode: postcode).firstラインです。

私は何が間違っているのか分かりません。誰かが私を助けることを願っています!

答えて

1

アクション名がpostcodeで、オブジェクト変数名/メソッドの名前がpostcodeであるため、SystemStackError (stack level too deep)が表示されています。それはメソッド/アクションと同じ名前を持っているので、あなたがpostcode属性渡すとき

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

エラーが発生します。

エラーを修正するには、アクションとルート名の名前を変更します。

+0

非常に正直な間違いです。どうもありがとう! – Bengala

関連する問題