私のrails3アプリケーションには、ajaxリクエストを送信するonchangeイベントを含むselect_tagがあります。
f.select 'forma_id', @collection, {:include_blank => true}, {:onchange => "goAjax('/lancamentos/receber_forma', this.value)", :class => 'btn'}
ここで、goAjaxは次のとおりです。
function goAjax(_url, _value) {
$.ajax({url: _url, data: 'value=' + _value, dataType: 'script'})
}
lancamentos_controller#receber_formaは(簡略化されたバージョン):
def receber_forma
@lancamento = Lancamento.new(:forma_id => params[:value])
logger.info 'forma_id = ' + @lancamento.forma_id
respond_to do |format|
format.html { render :new }
format.js
end
end
およびreceber_forma.js.erb:
$('div#cartoes').replaceWith("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>");
何が起こっているのかというと、その選択で値を選択すると、ラベルに表示される値は常に最初の呼び出しで送信された値になります。次の値の変更は、ラベルテキストを変更しないだけです。メソッドreceber_formaのロガーは、新しく選択された値が常に送信されることを示しています。
誰かが私がここで間違っていることを知っていますか?
ps:英語のエラーでごめんなさい