次の(そして機能する)動的メニュー/ドロップダウンがあり、プロパティタイプを選択してから、通常のRailsフォームでプロパティサブタイプを選択できます。
properties.js.コーヒー
jQuery ->
prop_sub_types = $('#property_prop_sub_type_id').html()
$('#property_prop_type_id').change ->
prop_type = $('#property_prop_type_id :selected').text()
escaped_prop_type = prop_type.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
options = $(prop_sub_types).filter("optgroup[label='#{escaped_prop_type}']").html()
if options
$('#property_prop_sub_type_id').html(options)
else
$('#property_prop_sub_type_id').empty()
_form.html.erb
<%= form_for(@property) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :prop_type_id, 'Property Type' %><br />
<%= f.collection_select :prop_type_id, PropType.order(:name), :id, :name, :prompt => "-- Select Property Type --" %>
</div>
<div class="field">
<%= f.label :prop_sub_type_id, 'Property Subtype' %><br />
<%= f.grouped_collection_select :prop_sub_type_id, PropType.order(:name), :prop_sub_types, :name, :id, :name, :prompt => "-- Select Property Subtype --" %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
これはうまくいきます。ただし、これを単純なフォームgemで既にセットアップされているより大きなアプリに統合したいと考えています。また、 bootstrap-sass経由で Twitter ブートストラップを使用しています。
私のフォームで取得できる最も近いものは次のとおりです。
<div class="field">
<%= f.association :prop_type, :input_html => { :id => "prop_type_id", :class => "span5" }, :prompt => "-- Select Property Type --" %>
<%= f.association :prop_sub_type, :input_html => { :id => "prop_sub_type_id", :class => "span5" }, :prompt => "-- Select Property Subtype --" %>
</div>
注:アプリがエラーをスローしないように、 :prop_type_id を :prop_type に変更する必要がありました。
しかし、これは機能しません。2 番目のドロップダウンは最初のドロップダウンにマップされません。java/coffeescript で何か間違ったことをしていますか? 2 番目のドロップダウンに「grouped_association」などのようなものはありますか?
これは実行可能ですか、それともフォーム全体を標準のレール形式に戻す必要がありますか?
アップデート
私はそれを機能させることができましたが、次のようにerbをdivに貼り付けました:
<div class="field">
<%= f.collection_select :prop_type_id, PropType.order(:name), :id, :name, :prompt => "-- Select Property Type --" %>
</div>
<div class="field">
<%= f.grouped_collection_select :prop_sub_type_id, PropType.order(:name), :prop_sub_types, :name, :id, :name, :prompt => "-- Select Property Subtype --" %>
</div>