У меня есть веб-приложение с 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 ищет их и меняет сам.
Любая помощь или подсказки будут оценены!
Да, решение было проще, как ожидалось. С помощью следующей команды вы можете получить дочерний индекс вложенного ресурса:
<%= 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');
});