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?
première fois que j'ai vu le terme poinçon de canard. J'aime ça! –
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