基于另一个选择框更新一个选择框(Ruby on Rails)

时间:2009-12-17 23:18:36

标签: javascript ruby-on-rails

我是Ruby on Rails的新手,需要一些帮助。

我正在开发一个可用于跟踪汽车的网络应用程序。有两个型号,一个代表品牌(萨博,本田,丰田等),另一个代表车型(思域,Miata,PT Cruiser等)。他们有“has_many”关系:

script/generate scaffold make name:string

script/generate scaffold model name:string make_id:integer

我用两个选择框创建了一个视图(使用select辅助方法创建),一个用于制作,一个用于模型。

这就是我无法弄清楚如何做的事情:我希望第二个选择框只能填充与第一个选择的制作相对应的模型。当第一个选择框中的make更改时,第二个中的模型也会更改。

谢谢你们!

2 个答案:

答案 0 :(得分:5)

您需要在第一个make选择框中创建一个ajax观察者,它会更新第二个选择框。如下所示:


  &lt%= select :make,:id, @makes %>
  &lt div id = "model_select"> &lt/div>
  &lt%= observe_field :make_id, :url => model_select_makes_path, #or whatever
            :with=>"make_id"%>

然后在你的make_controller中:


def model_select
  make = Make.find(params[:make_id])
  @models = make.models
  respond_to do |format|
    format.js  
  end
end

然后使用像这样的rjs partial或者在控制器中渲染:update:


 page.replace_html "model_select", :partial => "model_select"

并且model_select.html.erb将具有使用@models呈现模型选择器的html,如:


  <%= select_tag :model, :id, @models %>

答案 1 :(得分:0)

你必须编写一段JavaScript,当“make”选择框发生变化时,通过AJAX提交表单,然后在服务器端使用一个RJS视图,将你的名字输入第二个选择框。