CoffeeScript zum dynamischen Auswählen von Formularfeldern beim Ändern und Laden

Ich habe eine Rails-App, in der ich versuche, eine Liste von Einrichtungen basierend auf der in einem Formular ausgewählten Region auszuwählen. Bisher habe ich group_collection_select implementiert, um dies zu tun, sowie ein bisschen CoffeeScript.

Es funktioniert, wenn Sie einen neuen Datensatz erstellen und eine Region auswählen. Das Verhalten besteht darin, nur Einrichtungen anzuzeigen, die für die ausgewählte Region aufgelistet sind. Was nicht funktioniert, ist, dass beim Bearbeiten eines Datensatzes beim Auswählen der Einrichtungen alle Einrichtungen nach Regionen gruppiert werden, anstatt die Einrichtungen auf die ausgewählte Region zu beschränken.

Wenn ich eine andere Region und dann den ursprünglichen Grund auswähle, wird die entsprechende Liste der Einrichtungen angezeigt.

Ich möchte lernen, wie ich das CoffeeScript so umgestalten kann, dass beim Bearbeiten des Datensatzes die Funktion sowohl beim Laden der Seite (beim Bearbeiten) als auch beim Ändern ausgelöst wird.

Letztens gibt es Anwendungsfälle, in denen transfer_from_id auf nil / blank gesetzt ist und wir ein Textfeld mit dem Namen transfer_from_other verwenden. Wenn ich zurzeit keine Einrichtung auswähle und transfer_from_other ausfülle, wird beim Laden der Einrichtungen in transfer_from_id durch CoffeeScript die transfer_from_id von der ersten Einrichtung im Bereich festgelegt. Ich möchte dies machen, wo, wenn keine Einrichtung ausgewählt ist, die transfer_from_id Null ist, damit ich transfer_from_other verwenden kann.

So sieht mein Code aus:

calls.js.coffee

jQuery ->
  facilities = $('#call_transfer_from_id').html()

  $('#call_region_id').change ->
    region = $('#call_region_id :selected').text()
    options = $(facilities).filter("optgroup[label=#{region}]").html()

    if options
      $('#call_transfer_from_id').html(options)   
    else
      $('#call_transfer_from_id').empty()

region.rb

has_many :facilities

facility.rb

attr_accessible :region_id
belongs_to :region

_form.html.erb excerpt

      <%= f.label :region %>
      <%= f.collection_select(:region_id, Region.all, :id, :area, {:include_blank => true}, {:class => 'select', required: true}) %>
      <%= f.label :Transfer_From %>
      <%= f.grouped_collection_select :transfer_from_id, Region.order(:area), :active_facilities, :area, :id, :facility_name, {include_blank: true}, class: 'select' %>
      <%= f.label :Transfer_From_Other%>
      <%= f.text_field :transfer_from_other %>

Wenn meine Frage und meine Beispiele nicht klar sind, lass es mich wissen und ich bearbeite sie gerne.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage