导轨上的多级选择 [英] Multilevel select on rails

查看:21
本文介绍了导轨上的多级选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在多个模型之间使用多选下拉

I want to use multiple select drop-down between several models

我有这个:

class Report < ActiveRecord::Base
  belongs_to :region
end

class City < ActiveRecord::Base
  has_many :regions
end

class Region < ActiveRecord::Base
  has_many :reports
  belongs_to :city
end

当我选择一个城市时,我想从所选城市中提取项目列表并将其显示在下一个下拉列表中.如何创建下拉菜单之间的关系?谁能帮我?

when I select a city I want to pull list of items from selected city and show it on next drop-down list. How do I create relationships between drop-down menus ? Can anyone help me?

谢谢.

推荐答案

这个 link 可以帮助您做到这一点.

This link may help you in doing it.

Rails 2 + 原型

app/models/cities.rb

class City < ActiveRecord::Base
  has_many :regions
  has_many :reports, :through => :regions # this is newly added
end

cities_controller

class CitiesController < ApplicationController
  def index
    @cities  = City.find(:all)
    @regions = Region.find(:all)
    @reports   = Report.find(:all)
  end

  def update_regions
    # updates regions and reports based on city selected
    city = City.find(params[:city_id])
    regions = city.regions
    reports   = city.reports

    render :update do |page|
      page.replace_html 'regions', :partial => 'regions', :object => regions
      page.replace_html 'reports',   :partial => 'reports',   :object => reports
    end
  end

  def update_reports
    # updates reports based on region selected
    region = Region.find(params[:region_id])
    reports  = region.reports

    render :update do |page|
      page.replace_html 'reports', :partial => 'reports', :object => reports
    end
  end
end

_reports.html.erb

<%= collection_select(nil, :report_id, reports, :id, :title,
                     {:prompt   => "Select a Report"}) %>

_regions.html.erb

<%= collection_select(nil, :region_id, regions, :id, :name,
                     {:prompt   => "Select a Region"},
                     {:onchange => "#{remote_function(:url  => {:action => "update_reports"},
                                                      :with => "'region_id='+value")}"}) %>
<br/>

index.html.erb

<%= javascript_include_tag :defaults %>
<%= collection_select(nil, :city_id,  @cities,  :id, :name,
                      {:prompt   => "Select a City"},
                      {:onchange => "#{remote_function(:url  => {:action => "update_regions"},
                                                       :with => "'city_id='+value")}"}) %>
<br/>
<div id="regions"><%= render :partial => 'regions', :object => @regions %></div>
<div id="reports"><%= render :partial => 'reports',   :object => @reports %></div>

这篇关于导轨上的多级选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆