JavaFree.org | RubyOnBr.org

"Save or Cancel" no partial _form

Acompanhar "Save or Cancel" no partial _form 8 posts, 4 participantes

Avatar rrsilva 157 posts
  • Um colchete para tags HTML
  • Dois colchetes para tags ERB

Fiz assim por causa da formatação do forum.

Eu sei que todo mundo aqui sabe utilizar Form Builders, mas no caso aqui o foco é o link de cancelar do formulário.

Versão seca:

goods/_form.html.erb

[[ form_for(@good) do |f| ]]
[ol]
[li][[= f.label :name ><= f.text_field :name ]][/li]
[/ol]
[div class=“button_bar”]
[[= f.submit ]] or [[= link_to ‘Cancel’, @good.new_record? ? goods_path : @good ]]
[/div]
[[ end ]]

finished_goods/_form.html.erb

[[ form_for(@finished_good) do |f| ]]
[ol]
[li][[= f.label :name ><= f.text_field :name ]][/li]
[/ol]
[div class=“button_bar”]
[[= f.submit ]] or [[= link_to ‘Cancel’, @ finished_good.new_record? ? goods_path : @ finished_good ]]
[/div]
[[ end ]]

Perceba que os formularios são uma lista ordenada, e o link para cancelar de ambos retornam para goods_path se o registro for novo, e para ele mesmo caso o registro exista…

Bom keeping dry, criei um form_builder

Agora eu posso fazer isto nas minhas views:

goods/_form.html.erb

[[ form_for(@good) do |f| ]]
[ol]
[[= f.text_field :name ]]
[/ol]
[div class=“button_bar”]
[[= f.submit ]] or [[= f.cancel ]]
[/div]
[[ end ]]

finished_goods/_form.html.erb

[[ form_for(@finished_good) do |f| ]]
[ol]
[[= f.text_field :name ]]
[/ol]
[div class=“button_bar”]
[[= f.submit ]] or [[= f.cancel goods_path ]]
[/div]
[[ end ]]

Bom collection_path =
eval para executar o código
@template.send pois o link_to é protected
isso retorna o “goods_path”, está como primeiro argumento por causa que o label é “Cancel” na maioria dos casos

Espero que seja util para vocês também.
Sugestões?

 
Avatar Fernando Luizão 1352 posts

Porque vc usou eval?

Não funciona?

 
Avatar rrsilva 157 posts

Cara agora que você falou, eu estou fazendo a mesma pergunta kkkk. Provavelmente eu precisava do eval algumas versões do código atrás, nem me toquei que não precisava mais.

Então melhor ainda, refatorado para:

 
Avatar Mereghost 1303 posts

=/

Um helper apenas não resolve isso de maneira mais simples?

 
Avatar rrsilva 157 posts

No meu helper eu tinha

Mas como estes links estão sempre atrelados ao form_for eu decidi deixar no FormBuilder por parecer mais correto. Será se estou certo?

 
Avatar Fernando Luizão 1352 posts

Eu acho que vc extraiu bem o padrão, se seus forms sempre tem o link de cancelar, acho legal colocar no builder. Acho que nesse caso não tem certo ou errado =).

 
Avatar Rafael Rosa Fu 112 posts

Salve.

Há pouco tempo eu escrevi um artigo sobre um FormBuilder que eu escrevi. Uma coisa interessante é que ele renderiza uma partial para os fields, assim eu não preciso me matar toda vez que precisar alterar o layout.

FormBuilder customizado – como adicionar marcas de campos obrigatórios

Você poderia extender essa idéia, criar uma view para os botões de salvar e cancelar e depois adicionar um parâmetro opcional para alterar a view renderizada. Eu não tinha pensado nisso na época em que fiz o programa original mas acho que pode ser uma boa adição.

Aliás, se vocês tiverem um tempinho para ler o post eu gostaria de saber a opinião de vocês, comecei meu blog há pouco tempo.

Até mais,
Rafael
www.rafaelrosafu.com

 
Avatar Fernando Luizão 1352 posts

Bacana seu artigo Rafael. Eu já fiz um form builder para colocar um asterisco nos campos obrigatórios também, mas usei o plugin validation_reflection, é bem tranquilo usar.

Eu também escrevi um artigo sobre form builders faz pouco tempo, baseado em um artigo do Urubatan, se alguém quiser ler ta aí:

http://fernandoluizao.wordpress.com/2009/01/19/formbuilders-padronizando-seus-formularios-no-rails/

Abraços