ruby on rails 3,根据之前选择的选择,ruby方式填充选择列表

时间:2012-05-04 12:19:34

标签: jquery ruby-on-rails-3 ruby-on-rails-3.1

我想根据之前的collection_select选项填充collection_select的选项。我有一个选择体育,我想根据这项运动填充下一个选择。

问题是我找到的所有例子都是旧版本的ROR,所以我决定在这里问一下。我知道我必须添加一些讨厌的东西,如:

html_options = {:onchange=>'d=$("#player_sports_id").val();$.ajax({type: "GET", url: "/players/returnsel1.js?sports_id="+d, dataType: "script" });'})

调用player#returnsel1并返回returnsel1.js.erb。 在returnsel1中我有变量

@teamstoreturn=Teams.where(:sport_id=params[:sport_id])

那么jquery returnsel1.js.erb应该怎么样? 谢谢。 Dorijan

EDIT1: 这是它的实际外观,但它不起作用:

html_options = {:onchange=>'d=$("#player_sports_id").val();$.ajax({type: "GET", url: "/players/returnsel1?sports_id="+d, dataType: "script",success: function(data){ $("#player_teams_id").html(data)} });'})

在控制器中它是这样的:

  def returnsel1
    @teamstoreturn=Team.where(:sports_id=>params[:sports_id])
    render :inline => "<%= collection_select(:player, :teams_id, @teamstoreturn, :id, :naziv) %>"
  end

如果我去/ players / returnsel1?sports_id = 2我得到了正确的下拉菜单

我做错了什么?

EDIT2: 应该有dataType:“html”而不是dataType:“script” 现在它正在工作:)

1 个答案:

答案 0 :(得分:1)

您应该使用函数扩展.ajax请求,该函数可以处理成功的答案。如果没有这个,答案就是诋毁。该函数应该包含一个jquery代码,以更改其他选择内容。

html_options = {:onchange=>'d=$("#player_sports_id").val();$.ajax({type: "GET", url: "/players/returnsel1.js?sports_id="+d, dataType: "script", success: function(data){ $("#other_box_part").html(data)} });'})

这样您就可以更改此元素,因此必须将其渲染为必须插入的html片段。因此,答案中不需要javascript代码,只需要html。 E.g:

<%= select_tag ... %>