RoR:form.select + onchange没有将参数中的正确值传递给控制器

时间:2012-01-01 08:10:52

标签: jquery select controller action params

我在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代码,感谢罗宾在下面给出的答案(请注意我将其用于行动&#34; get_results&#34;而不是原来的&#34; ;显示&#34):

<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

这样,警报消息包含正确的值(value1或value2),但是param_one不存在,因此puts不返回&#34; param_one&#34;,而我希望看到&#34; value1&#34;或&#34; value2&#34;那里。

任何人都可以指出我在哪里做错了什么?

由于

1 个答案:

答案 0 :(得分:1)

将您的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>