我是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更改时,第二个中的模型也会更改。
谢谢你们!
答案 0 :(得分:5)
您需要在第一个make选择框中创建一个ajax观察者,它会更新第二个选择框。如下所示:
<%= select :make,:id, @makes %>
< div id = "model_select"> </div>
<%= 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视图,将你的名字输入第二个选择框。