1

ユーザーが選択した国に応じて、都道府県の自動選択を実装したいと考えています。
つまり、ユーザーが米国を選択すると、都道府県の選択にカリフォルニア、ニューヨークなどが表示されます

カントリーモデルは

  • ID
  • 名前

都道府県モデルあり

  • ID
  • country_id

今、私はこれらのフィールドをこのように表示しています

<% resource.build_user_profile if resource.user_profile.nil? %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :class => 'form-horizontal' }) do |f| %>
  <%= devise_error_messages! %>

<%= f.fields_for :user_profile do |profile_form| %>

 <label class="control-label"><%= profile_form.label :country_id %></label>
 <%= profile_form.collection_select("country_id", Country.find(:all), :id, :name_en) %>

 <label class="control-label"><%= profile_form.label :prefecture_id %></label>
 <%= profile_form.collection_select("prefecture_id", Prefecture.find(:all), :id, :name) %>

<% end %>
4

1 に答える 1

0

このようにフォームを変更してみてください

<%= f.label :country_id %><br />
<%= f.collection_select :country_id, Country.all, :id, :name_en, include_blank: true %>

<%= f.label :state_id, "State or Province" %><br />
<%= f.grouped_collection_select :prefecture_id, Country.all, :prefectures, :name_en, :id, :name, include_blank: true %>

そして、適切なコーヒーファイルに貼り付けます (モデルがprofileよりも小さいprofile.js.coffee場合) 他のモデルにある場合は、ファイル名とファイル内のプロファイルを変更します

jQuery ->
  $('#resource_name_user_profile_prefecture_id').parent().hide()
  prefectures = $('#resource_name_user_profile_prefecture_id').html()
  $('#resource_name_user_profile_country_id').change ->
    country = $('#resource_name_user_profile_country_id :selected').text()
    escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
    options = $(prefectures).filter("optgroup[label='#{escaped_country}']").html()
    if options
      $('#resource_name_user_profile_prefecture_id').html(options)
      $('#resource_name_user_profile_prefecture_id').parent().show()
    else
      $('#resource_name_user_profile_prefecture_id').empty()
      $('#resource_name_user_profile_prefecture_id').parent().hide()
于 2012-12-24T20:02:11.450 に答える