RoR: form.select + onchange не передает правильное значение в параметрах контроллеру - PullRequest
2 голосов
/ 01 января 2012

У меня есть меню выбора в форме Ruby on Rails, определенное следующим образом:

<%= f.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, {:id=>"Menu1_Id", :class => "Menu1_Class"} %>

Я использую обработчик событий для запуска действия контроллера, когда опция выбрана, и я хочу передать ей значение выбранной опции

<script type="text/JavaScript" src=http://code.jquery.com/jquery-latest.js">
$(function(){
    $('.Menu1_Class').bind('change', function(){
        alert($(this).val());
        $.ajax('#{:controller => "TestsController", :action => "show"}?param_one='+$(this).val());
    });
});
</script>

РЕДАКТИРОВАТЬ: это код js, который работал для меня благодаря ответу Робина ниже (обратите внимание, что я использую его для действия "get_results" вместо оригинального "show"):

<script type="text/JavaScript">
$(function(){
  $('.menu_class').bind('change', function(){
    $.ajax({
      url: "<%= get_results_my_tests_url %>",
        data: {
          param_one: $(this).val()
        }
      });
    });
});
</script>

в моем контроллере

# GET /tests/1
# GET /tests/1.json
def show
  @test = Test.find(params[:id])
  if params[:param_one].present?
    @blah=params[:param_one]
    puts "show : @blah = " + @blah.to_s + "\n"
  end
  respond_to do |format|
    format.html # show.html.erb
    format.json { render :json => @test }
  end
end

При этом в предупреждающем сообщении содержится правильное значение (значение1 или значение2), но param_one отсутствует, поэтому команда put ничего не возвращает для «param_one», хотя я ожидаю увидеть там «value1» или «value2».

Кто-нибудь может указать мне, где я делаю что-то не так?

Спасибо

1 Ответ

1 голос
/ 02 января 2012

Измените свой JavaScript следующим образом:

<script type="text/JavaScript" src=http://code.jquery.com/jquery-latest.js">
    $(function(){
        $('.Menu1_Class').bind('change', function(){
            alert($(this).val());
            $.ajax({
                url: "<%= test_path(@test) %>",
                data: { param_one: $(this).val() }
            });
        });
    });
</script>
...