2010-09-28 3 views
0

Работа имеет много задач, задача имеет много заметокrails3 html5 jquery динамически добавлены вложенные формы, шаблон презентатора?

Как должна выглядеть такая форма? С частичными данными я могу ввести всю работу из/jobs/new и добавить новые задания из/jobs/2/tasks/new с возможностью добавления заметок оттуда и, конечно, возможность добавлять новые заметки из/jobs/2/tasks/5/notes/new?

Это хорошее место для использования шаблона презентатора? Когда да, какую библиотеку я должен использовать? Я пробовал ветки rails3 active_presenter на github, но у меня были некоторые проблемы с частичными формами.

У кого-нибудь хороший пример для такой задачи?

Существует множество учебных пособий для презентаторов, учебников вложенных форм и ненавязчивых javascript-руководств, но не только один из них объяснил все вместе.

Было бы неплохо, если бы кто-то наклеил учебник с использованием HTML5 и rails3 примеры

ответ

0

Presenter шаблон не обязательно лучше всего подходят здесь, на самом деле.

Вы, вероятно, получите futher только с помощью accepts_nested_attributes_for:

# Models 
class Job < ActiveRecord::Base 
    has_many :tasks, :autosave => true 
    accepts_nested_attributes_for :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :job 
    has_many :notes, :autosave => true 
    accepts_nested_attributes_for :notes 
end 

class Note < ActiveRecord::Base 
    belongs_to :task 
end 

И тогда в вашей форме делать что-то подобное (в Haml):

= form_for @job do |job| 
    = job.text_field :name # or whatever your Job attributes are 
    = job.fields_for :tasks do |task| 
    = task.text_field :name 
    = task.check_box_field :complete 
    = task.fields_for :notes do |note| 
     = note.text_field :body 
    = job.submit "Create Job" 

Вы, возможно, на самом деле инициализирует некоторые задачи/примечания для новых заданий или связанные записи могут не отображаться. Например, сделайте что-то вроде 3.times { @job.tasks.build }, чтобы создать 3 пустые задачи (и, следовательно, отобразите подзадачу задачи 3 раза).