Я ищу хороший источник Rails для этого - PullRequest
0 голосов
/ 03 апреля 2011

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Настройте свои контроллеры, как обычно. Вам нужно будет использовать функцию вложенных атрибутов Rails. Это позволяет создавать дочерние объекты одновременно с созданием их родителей с использованием одной формы.

Это моя ссылка для вложенных атрибутов . Единственное изменение, которое вам нужно будет сделать, если вы используете Ruby 1.9.2, - это помощник setup_person. returning устарела, поэтому вы можете изменить его на:

def setup_person(person)
  person.tap do |p|
    p.children.build if p.children.empty?
  end
end

В типичном стиле Rails это будет просто работать с использованием стандартных контроллеров для каждого из ваших ресурсов.

Другие ссылки

http://weblog.rubyonrails.org/2009/1/26/nested-model-forms

http://jeffperrin.com/2009/06/04/rails-nested-forms-and-collection_select/

0 голосов
/ 03 апреля 2011

У меня нет веб-источника, который документирует то, что я обычно делаю, но я создал гист , который документирует то, что я делаю здесь чаще всего: https://gist.github.com/900241


Суть в том, что у вас есть модель проекта с множеством ролей проекта, и вы хотите отредактировать множество ролей проекта в форме проекта. Это в значительной степени классический сценарий accepts_nested_attributes_for, и практически любая страница, которая о нем говорит, даст вам достойную рецензию. Проблема в том, что решения, которые я видел, всегда включали в себя какой-то серьезно грязный навязчивый JavaScript, который ускользал от всего представления формы и добавлял его в метод ссылки onClick. Недавно я предложил более чистый и ненавязчивый подход с использованием шаблонов jQuery.

Вам не нужно ничего делать с вашим ProjectsController, когда вы переходите к вложенной модели. Все просто работает на уровне контроллера, и вам даже не нужен ProjectRolesController. (Вот почему я не удосужился включить их в суть.) На уровне модели это просто стандарт accepts_nested_attributes_for. Где это становится интересным, в представлении.

Форма проекта имеет два блока form_for: один отображает шаблон jQuery, а другой - форму ролей проекта. Шаблон jQuery, в свою очередь, просто отображает форму ролей проекта (mmm DRY!), Но внутри тега <script> и с пустой ролью проекта. Поскольку форма находится внутри тега скрипта, она не будет отправлена ​​вместе с формой проекта, а поскольку тип скрипта - "text / x-jquery-tmpl", это полностью допустимая разметка.

Когда пользователь нажимает «Добавить роль проекта», он запускает некоторый jQuery, который принимает форму в шаблоне, заменяет индекс на текущую дату (это все, чтобы эта роль проекта могла быть однозначно идентифицирована), и добавляет это до конца раздела ролей проекта формы.

Когда пользователь нажимает «Удалить» рядом с ролью проекта, он проверяет, является ли эта роль проекта новой записью, а если нет, то добавляет скрытое поле «_delete» в конец формы. В любом случае он удаляет div роли проекта из DOM.

...