2013-01-05 38 views
0

我试图让动态选择就像这样http://railscasts.com/episodes/88-dynamic-select-menus-revised?view=asciicast
在我的情况下,它不会以某种方式工作。 我的代码有什么问题?这个动态由JQuery选择有什么问题?

的意见/注册/ edit.html.erb

<h2>Edit <%= resource_name.to_s.humanize %></h2> 

<% 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| %> 

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

     <%= profile_form.label :prefecture_id, "State or Prefecture" %><br /> 
     <%= profile_form.grouped_collection_select :prefecture_id, Country.all, :prefectures, :name, :id, :name, include_blank: true %> 

    <% end %> 

    <br /> 

    <div class="control-group"> 
     <div class="controls"> 
      <%= f.submit 'Update', :class => 'btn btn-primary' %> 
     </div> 
    </div> 

<% end %> 

user_profiles.js.coffee

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

回答

2

在传递时,任何情况下:

<%= f.fields_for :user_profile ... %> 

字段的属性name = and id =不能只是“#user_profile ...”,当父表单构建器有一个对象时。确定源代码的确切ID看(HTML响应)。