Rails - динамически генерирующие глубоко вложенные атрибуты в формах - PullRequest
1 голос
/ 29 ноября 2011

Я не нашел решения для своей конкретной проблемы или недостаточно понимаю, чтобы знать, где искать.

У меня есть вложенная форма, в которой я динамически генерирую новые объекты в соответствии с Railscast 196 /197.Это прекрасно работает (в rails 3.0.9), за исключением более глубокого уровня (3-го) с сочетанием has_one и has_many.Я не уверен, что это необходимые модификации javascript, которые я не понимаю, или ассоциации, или инициализация вложенных атрибутов.

Для простоты я перевожу свою модель так: существует дерево, которое имеет ствол has_one и has_manyяблоки.У каждого яблока есть ядро ​​has_one и has_many.

Когда я создаю новое дерево, моя форма Create автоматически отображает поля для ствола и поля для одного яблока с одним ядром и двумя червями (мне нравятся мои фрукты, заполненные иsocial ...).

Я могу условно создать ссылку «Добавить» для транка, на случай, если по какой-то причине ее нет.

Я могу динамически создать ссылку добавления.для нового яблока.Однако, когда я это делаю, он не инициализируется автоматически с одним ядром и двумя червями.Я полагаю, это потому, что он генерируется с помощью javascript / helper, а не в «новом» методе контроллера дерева, как в случае самой формы.

Это не такая большая проблема для червейТак как у яблока может быть ноль червей, то в любом случае имеет смысл добавить туда ссылку «добавить червя».Однако у яблока должно быть одно и только одно ядро, поэтому я не хочу, чтобы для этого была добавлена ​​ссылка для добавления, она просто должна быть там.

В идеале каждое «яблоко добавления» инициализирует одно ядро ​​и два.хотя черви.

Я не знаю, как адаптировать javascript / помощник для инициализации вложенных атрибутов apple (ядро и черви), когда я добавляю яблоко.

Не знаюв качестве альтернативы знаю, как инициализировать объект apple таким образом, чтобы он автоматически инициализировал один базовый объект.

Не знаю, если все это не получится, как получить доступ к базовому свойству в свойстве apple (s)древовидный контроллер через представление, чтобы я мог сделать нечто подобное, как я делаю для транка, то есть, «если по какой-то причине транка нет, создайте новый (или отобразите ссылку« добавить », чтобы создать новыйone) "в _form частично.

= if @tree.trunk.blank? 
  - @tree.trunk= Trunk.new -# or 'display add button'
= f.fields_for :trunk do |builder|
  = render 'shared/trunk_fields', :f => builder

-> это, но для еще одного уровня.Если я перехожу к частичному _apple_fields и пробую что-то вроде @ tree.apple / s.core, я получаю ошибки, такие же, если я иду дальше в частичную _core_fields и пытаюсь сделать ядро ​​доступным для проверки на пустое ?.Я не могу найти правильный синтаксис для доступа к одному из множества ядер Apple.И в любом случае это не было бы идеальным решением.

Любые указатели очень ценятся.Я предполагаю, что решение действительно простое, и я слишком новичок во всем этом, чтобы видеть это ...

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