Как реализовать цепочечные селекции в вложенной форме RoR?

0

У меня есть веб-приложение с Ruby 2 Rails 4 и довольно сложная форма. То, что я пытаюсь сделать, это комбинировать вложенные формы с целыми выделениями. Проблема в том, что поля для вложенного ресурса создаются "на лету" и даются уникальная комбинация даты и времени, но в моем javascript мне нужно определить, какой выбор привязан к другому выбору.

Эти два учебника, которые я использовал для моей концепции, следующие: http://homeonrails.blogspot.de/2012/01/rails-31-linked-dropdown-cascading.html http://railscasts.com/episodes/196-nested- модель форм-пересмотренная

Но важный код в основном состоит из трех разных файлов:

  $(document).ready(function(){
    $('select#device_name').chainedTo('select#room_name');
  });

Это цепочки, которые выбираются другим и могут отображаться в шаблоне формы или поле_партий.

Вспомогательный метод выглядит следующим образом:

  def link_to_add_fields(name, f, association)
    new_object = f.object.send(association).klass.new
    id = new_object.object_id
    fields = f.fields_for(association, new_object, child_index: id) do |builder|
      render(association.to_s.singularize + "_fields", f: builder)
    end
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
  end

И последнее, но не менее важное: сценарий кофе:

jQuery ->
  $('form').on 'click', '.remove_fields', (event) ->
    $(this).prev('input[type=hidden]').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()

  $('form').on 'click', '.add_fields', (event) ->
    time = new Date().getTime()
    regexp = new RegExp($(this).data('id'), 'g')
    $(this).before($(this).data('fields').replace(regexp, time))
    event.preventDefault()

Итак, мое понимание того, как это работает, заключается в том, что я нажимаю кнопку, вспомогательный метод создает новую ассоциацию, получает идентификатор, отображает html из частичного, а скрипт кофе просто заменяет идентификатор объекта текущим временем даты, поэтому я могу добавить несколько ассоциаций, не имеющих одинакового идентификатора.

Вопрос заключается в том, как изменить javascript цепочки функции, чтобы получить идентификаторы из выделенных ящиков, потому что прямо сейчас я понятия не имею, как создать динамический javascript, который будет принимать дату с кофейного знака или позволить javascript ищет их и меняет сам.

Любая помощь или подсказки будут оценены!

Теги:
nested-forms
chained

1 ответ

0
Лучший ответ

Да, решение было проще, как ожидалось. С помощью следующей команды вы можете получить дочерний индекс вложенного ресурса:

<%= f.object_name.gsub(/[^0-9]+/,'') %>

И этот индекс можно передать в javascript, чтобы связать два выбора друг с другом:

  $(document).ready(function(){
    $('select#device_attributes_<%= f.object_name.gsub(/[^0-9]+/,'') %>_name').chainedTo('select#room_attributes_<%= f.object_name.gsub(/[^0-9]+/,'') %>_name');
  });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню