2013-10-09 88 views
0

我跟着這個railscast成功地顯示國家和城市作爲動態選擇菜單來選擇添加新配置文件的國家和城市。我在app/views/search中創建了一個帶有索引操作的控制器「search_controller.rb」,並創建了一個控制器「index.html.erb」。現在,我想創建的應用程序/視圖/搜索/ index.html.erb搜索表單具有如何在搜索表單中添加動態選擇菜單

  1. 自動填充文本字段通過配置文件的受試者(幾乎400名受試者在此表)
  2. 國家和城市進行搜索動態選擇菜單,可通過個人資料的國家和城市進行搜索

應用程序/模型/ profile.rb

has_many :categorizations 
has_many :subjects, through: :categorizations 

belongs_to :country 
belongs_to :city 

應用程序/模型/ subject.rb中

has_many :categorizations 
has_many :profiles, through: :categorizations 

應用程序/模型/ categorization.rb

belongs_to :profile 
belongs_to :subject 

應用程序/模型/ country.rb

has_many :cities 
has_many :profiles 

應用程序/模型/ city.rb

belongs_to :country 
has_many :profiles 

應用/視圖/簡檔/ _form.html.erb

<div class="field"> 
    <%= f.label :country_id %><br /> 
    <%= f.collection_select :country_id, Country.order(:name), :id, :name, include_blank: true %> 
</div> 

app/a ssets/Java腳本/ profiles.js.coffee

$('#profile_city_id').parent().hide() 
cities = $('#profile_city_id').html() 
$('#profile_country_id').change -> 
country = $('#profile_country_id :selected').text() 
escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1') 
options = $(cities).filter("optgroup[label='#{escaped_country}']").html() 
if options 
    $('#profile_city_id').html(options) 
    $('#profile_city_id').parent().show() 
else 
    $('#profile_city_id').empty() 
    $('#profile_city_id').parent().hide() 
+0

對於那些正在研究並使用[Railscast](http://railscasts.com/episodes/88-dynamic-select-menus-revised)作爲幫助的人士,我們提供了一個修訂版本。 – samuelkobe

回答

0

這是我與sunspot-solr搜索和twitter-typeahead-rails爲自動完成的解決方案。在模型中添加可搜索的塊後,我使用了以下代碼用於我的應用程序。我通過twitter typeahead將本人的主題列表加載到本地存儲中,因爲它不會更改,但如果需要,可以使用json。

應用程序/控制器/ search_controller.rb

def index 
    @search = Profile.search do 
    fulltext params[:search] 
    with(:city_id, params[:city]) if params[:city].present? 
    end 
    @profiles = @search.results 
end 

應用/視圖/搜索/ index.html.erb

<%= text_field_tag :search, params[:search], :class => 'typeahead' %> 
<div class="field"> 
    <%= select_tag :country, options_from_collection_for_select(Country.all, :id, :name, params[:country]), include_blank: true %> 
</div> 
<div class="field"> 
    <%= select_tag :city, option_groups_from_collection_for_select(Country.order(:name), :cities, :name, :id, :name, params[:city]), include_blank: true %> 
</div> 
<%= submit_tag "search", :name => nil, :class => 'btn btn-default' %> 

應用程序/資產/ Javascript角/ profiles.js .coffee

$('#city').parent().hide() 
cities = $('#city').html() 
$('#country').change -> 
    country = $('#country :selected').text() 
    escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1') 
    options = $(cities).filter("optgroup[label='#{escaped_country}']").html() 
    if options 
    $('#city').html(options) 
    $('#city').parent().show() 
    else 
    $('#city').empty() 
    $('#city').parent().hide() 

$('.typeahead').typeahead({         
    local: ["3D Design", "Architecture", "Chemical engineering", ...] 
    limit: 10                 
});