4

このチュートリアルを使用して、動的選択メニューを実装する方法を最終的に理解しました。

すべてが機能しますが、ドロップダウンで都市を名前で整理するにはどうすればよいですか....

以下は、私が書いたすべてのコードです。(さらに詳しい情報が必要な場合はお知らせください)

レールの初心者は助けてください:)

ビュー

<%= simple_form_for ([@book, @rating]) do |f| %>

  <div class="field">
    <%= f.collection_select :state_id, State.order(:name),  :id, :name, {:include_blank=> "Select a State"}, {:class=>'dropdown'} %>
  </div>


  ### I would like the order of the cities displayed in the drop down to be alphabetized 
  <div class="field">
    <%= f.grouped_collection_select :city_id, State.order(:name), :cities, :name, :id, :name, {:include_blank=> "Select a City"}, {:class=>'dropdown'} %>
  </div>        

<% end %>
4

5 に答える 5

7

オプション 1 :モデルに、都市がアルファベット順に返されるように指示するデフォルト スコープCityを追加します。

# app/models/city.rb
default_scope :order => 'cities.name ASC'

オブジェクトのコレクションはCity、デフォルトで名前のアルファベット順に返されます。

オプション 2 :オブジェクトの関連付けとして都市をアルファベット順に返す名前付きスコープ Stateモデルに定義します。State

# app/models/state.rb
scope :cities_by_name, -> { cities.order(name: :asc) } # Rails 4

scope :cities_by_name, cities.order("name ASC") # Rails 3

grouped_collection次に、範囲指定されたクエリをヘルパーに渡します。

f.grouped_collection_select :city_id, State.order(:name), :cities_by_name, :name, :id, :name, {:include_blank=> "Select a City"}, {:class=>'dropdown'}
于 2013-12-24T04:39:53.050 に答える
1

モデルの順序付けでdefault_scopeを使用するのはどうですか?City

または、Stateそのようなスコープを作成します:

scope :ordered_cities, ->{ cities.order(:name) }

選択を変更するよりも

f.grouped_collection_select :city_id, State.order(:name), :ordered_cities, :name, :id, :name, {:include_blank=> "Select a City"}, {:class=>'dropdown'}
于 2013-12-24T04:45:20.907 に答える