2010-02-02 8 views
2

Je suis donc novice dans Rails et j'essaie de déterminer quelle est la méthode canonique pour ajouter des éléments de formulaire personnalisés. Actuellement, la façon dont je le fais est super grotesque.Éléments de formulaire personnalisés dans les rails

module ActionView 
    module Helpers 
    module FormOptionsHelper 
     def some_new_field(object, method, options = {}, html_options = {}) 
      #code code 
     end 
    end 
    class FormBuilder 
     def contract_year_select(method, options = {}, html_options = {}) 
     @template.some_new_field(@object_name, method, objectify_options(options), @default_options.merge(html_options)) 
     end 
    end 
    end 
end 

J'ai vu ceci cependant.

class Forms::ApplicationFormBuilder < ActionView::Helpers::FormBuilder 
    Forms::ApplicationHelper.instance_methods.each do |selector| 
    src = <<-end_src 
     def #{selector}(method, options = {}) 
     @template.send(#{selector.inspect}, @object_name, method, objectify_options(options)) 
     end 
    end_src 
    class_eval src, __FILE__, __LINE__ 
    end 

    private 

    def objectify_options(options) 
    @default_options.merge(options.merge(:object => @object)) 
    end 
end 

(de here)

L'extension FormBuilder semble être une meilleure solution que la perforation de canard il. Existe-t-il un autre moyen de faire cela qui ne nécessite pas de copier directement des parties de la classe FormBuilder dans ma classe personnalisée?

+1

première fois que j'ai vu le terme poinçon de canard. J'aime ça! –

+3

Provient d'une citation de Patrick Ewing "Eh bien, je viens d'être totalement vendu par Adam, l'idée étant que si ça marche comme un canard et qu'il parle comme un canard, c'est un canard, n'est-ce pas? le bruit que vous voulez, vous devez juste frapper ce canard jusqu'à ce qu'il retourne ce que vous attendez. " – baudtack

Répondre

0

Deux parter ici:

D'abord, comme quelqu'un de nouveau sur les rails, je vous recommande d'utiliser la pierre précieuse Formtastic. V est la partie abusée et négligée de MVC dans les rails.

Formtastic est très bien testé et a un support pour Rails 3

https://github.com/justinfrench/formtastic

Avec Formtastic vous pouvez créer des éléments personnalisés PROLONGER est classe brillante et obtenir une foule d'autres avantages au-delà de l'affichage simple sur le terrain. Deuxièmement, l'extension de la classe est définitivement acceptable. Je préfère la méthode Module car c'est plus facile à regarder. Comme quelque chose le long des lignes de:

module Forms::ApplicationFormBuilder 
class WhateverYourExtending 
    def some_special_method(stuff) 
    # all kinds of special stuff here 
    end 
end 
end 

Mais je sais à peine ce dont je parle ici ... Ce truc est juste au bord de ma compréhension.

Je viens de vous voir parler de formulaires et j'adore Formtastic!

Questions connexes