Michael Koziarski acabou de anunciar no blog oficial do Rails sobre um patch já muito pedido por vários usuários do Rails.
A idéia é que com este patch seja simplificado o trabalho quando precisamos de formulários aninhados… ou seja, um formulário para dois models ou models relacionados.
No exemplo postado por Michael, ele mostra o que atualmente precisamos fazer (veja abaixo):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<% form_for @project do |project_form| %> <div> <%= project_form.label :name, 'Project name:' %> <%= project_form.text_field :name %> </div> <% @project.tasks.each do |task| %> <% new_or_existing = task.new_record? ? 'new' : 'existing' %> <% prefix = "project[#{new_or_existing}_task_attributes][]" %> <% fields_for prefix, task do |task_form| %> <p> <div> <%= task_form.label :name, 'Task:' %> <%= task_form.text_field :name %> </div> <% unless task.new_record? %> <div> <%= task_form.label :_delete, 'Remove:' %> <%= task_form.check_box :_delete %> </div> <% end %> </p> <% end %> <% end %> <%= project_form.submit %> <% end %> |
Que é um formulário para os models na seguinte situação:
1 2 3 4 5 6 |
class Project < ActiveRecord::Base has_many :tasks validates_presence_of :name end |
1 2 3 4 5 6 |
class Task < ActiveRecord::Base belongs_to :project validates_presence_of :name end |
E como seria esta mesma funcionalidade mas agora com o patch:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<% form_for @project do |project_form| %> <div> <%= project_form.label :name, 'Project name:' %> <%= project_form.text_field :name %> </div> <!-- Here we call fields_for on the project_form builder instance. The block is called for each member of the tasks collection. --> <% project_form.fields_for :tasks do |task_form| %> <p> <div> <%= task_form.label :name, 'Task:' %> <%= task_form.text_field :name %> </div> <% unless task_form.object.new_record? %> <div> <%= task_form.label :_delete, 'Remove:' %> <%= task_form.check_box :_delete %> </div> <% end %> </p> <% end %> <% end %> <%= project_form.submit %> <% end %> |
e também uma pequena alteração no model:
1 2 3 4 5 6 |
class Project < ActiveRecord::Base has_many :tasks accept_nested_attributes_for :tasks, :allow_destroy => true end |
A idéia do post é que o máximo de pessoas testem esse novo patch, comentem, critiquem e sugiram novas funcionalidades.
Para mais sobre o patch acesse o post oficial aqui
2 Comentários to “Patch para Nested Forms no Rails”
Levy diz:
26/01/2009 em 02:19 PM
Muito bom saber que isto agora vai virar parte do Rails.
Por enquanto dá pra usar o tutorial de Ryan Bates sobre “Múltiplos Models em 1 Form” usando Ajax, que traduzi e está em: http://www.levyonrails.com/posts/14-tratando-m-ltiplos-models-em-um-nico-form
Abraço!
daniel lopes diz:
27/01/2009 em 10:40 AM
Bacana Levy, não tinha visto a sua tradução ainda.
Comentário
CATEGORIAS
HomeDesign
SEO
Empreendimento
Cifras
Ruby e Rails
Flex
Photoshop
Flash
XHTML/CSS
JavaScript
Variados
Database
Firefox
Projetos
3D
Projetos
TextMate
Smalltalk
Mac
Livros
ARQUIVO
07/2010 (2)06/2010 (4)
05/2010 (4)
04/2010 (4)
03/2010 (5)
02/2010 (7)
01/2009 (4)
12/2009 (7)
11/2009 (4)
10/2009 (10)
09/2009 (7)
08/2009 (6)
07/2009 (12)
06/2009 (5)
05/2009 (6)
04/2009 (9)
03/2009 (14)
02/2009 (18)
01/2009 (14)
12/2008 (20)
11/2008 (18)
10/2008 (9)
09/2008 (12)
08/2008 (6)
07/2008 (12)
06/2008 (10)
05/2008 (15)
04/2008 (19)




PomoDo e Pomodoro Technique
comentado por Luis
Flash SlideShow
comentado por Gilmar
50% do software é design
comentado por Daniel Lopes
Vetores Grátis - VectorLab Pack
comentado por louis vuitton
Texturas legais
comentado por thomas sabo kommt