Трехуровневые вложенные формы в рельсах с помощью acceptpts_nested_attributes_for - PullRequest
7 голосов
/ 03 августа 2009

Я пытался реализовать динамическую многомодельную форму с accepts_nested_attributes_for в моем приложении rails. Я следовал за примером Eloy Duran сложных форм, который демонстрирует двухуровневую реализацию, но я пытался расширить это до трех уровней. Есть ли поддержка с accepts_nested_attributes_for для 3-х уровневой формы? Может кто-нибудь показать мне, как расширить пример приложения?

У меня частично работает javascript (по какой-то причине не всегда) для 3-го уровня, но я не могу сохранить объекты 3-го уровня. Имя параметра, которое он передает для каждого атрибута:

 greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute] 

Где greatgrandparent - это объект, для которого предназначена форма, grandparent - это первый уровень, parent - второй уровень, а object - 3-й уровень (тот, который я пытаюсь сохранить).

Спасибо, я ценю любые указатели.

Ответы [ 2 ]

18 голосов
/ 05 августа 2009

Я обновил complex-form-examples для работы с Rails 2.3. См. глубокая ветвь для примера с глубоко вложенными моделями.

git clone git://github.com/ryanb/complex-form-examples.git
cd complex-form-examples
git checkout -b deep origin/deep
rake db:migrate
script/server

Это самое чистое решение, которое я видел до сих пор. Если вы обнаружите какие-либо ошибки или улучшения, добавьте проблему на GitHub .

2 голосов
/ 25 августа 2009

Прежде всего, спасибо Райану за публикацию вашего решения. Он работает очень хорошо в двухуровневой форме, но у меня есть проблемы с использованием его в более глубокой вложенной форме. Firebug выдает ошибку javascript, если я хочу поместить add_child_link в другой уже добавленный фрагмент. Кажется, здесь есть ошибка.

Я уже пытался избежать выхода из внутренней части, передавая другой параметр методу link, но это как-то не работает.

def add_child_link(name, f, options)
  fields = new_child_fields(f, options)
  fields = escape_javascript(fields) unless options[:already_escaping] == true
  link_to_function name, %{
        var new_object_id = new Date().getTime();
        var html = jQuery("#{fields}".replace(/#{options[:index]}/g, new_object_id)).hide();
        html.appendTo(jQuery("#{options[:where]}")).show();
      }
end

Есть намеки на это?

С уважением,

Mike

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...