JeuWeb - Crée ton jeu par navigateur
[Résolu][Rails] Modifier le form helper - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][Rails] Modifier le form helper (/showthread.php?tid=6552)

Pages : 1 2 3


[Résolu][Rails] Modifier le form helper - Holy - 06-01-2013

Yooo !

J'ai un petit soucis avec l'helper form de Rails. En fait, j'aimerais personnaliser la mise en forme de mes champs. Vous me direz : ben y a le css pour ça.

Pas faux ! Mais j'aimerais aller un peu plus loin. J'aimerais modifier l'aspect de mes champs en fonction de la taille de mes champs (attribut size). Ce que j'aimerais faire : ajouter une classe en fonction de la taille des champs.

Je me demandais donc si il était possible de modifier l'helper de Rails afin de rendre ce procédé automatique.

Merci d'avance pour votre aide Smile

Holy


RE: [Rails] Modifier le form helper - Sephi-Chan - 07-01-2013

Tu peux t'intéresser à la création de form builder personnalisés. Wink


RE: [Rails] Modifier le form helper - t.bodeux - 07-01-2013

Je ne saos pas si tu connais la GEM 'simple_form', elle fait partie pour moi des essentiel a tout projet Rails.
Sur cellci, tu peux ensuite personnaliser normalement les builder par défaut Smile


RE: [Rails] Modifier le form helper - Plume - 07-01-2013

C'est pour utiliser quelque chose comme Twitter Bootstrap et compagnie ?


RE: [Rails] Modifier le form helper - Holy - 14-01-2013

(07-01-2013, 12:32 PM)Plume a écrit : C'est pour utiliser quelque chose comme Twitter Bootstrap et compagnie ?
Nope.

Finalement j'ai opté pour les nouvelles propriétés de background en CSS3 qui permettent d'avoir plusieurs background pour un même élément. Ca me permet de créer des champs extensibles qui se tiennent, plutôt sympa.

Cela dit, ça m'a permis de découvrir les form_builders et simple form. Thanks Smile


RE: [Résolu][Rails] Modifier le form helper - Holy - 14-01-2013

Je continue à bosser mes formulaires et j'ai commencé à utiliser simple_form. De base, simple_form renseigne les hint et les erreurs dans des divs adjacents au champ input.

Exemple :
= u.input :email
Générera :
<div class="input email required field_with_hint">
<label class="email required control-label" for="user_email"><abbr title="required">*</abbr> E-mail</label>
<input class="string email required" id="user_email" name="user[email]" size="50" type="email" />
<span class="hint">Une adresse email valide qui vous permettra de vous connecter.</span>
</div>

J'aimerais pouvoir modifier différentes choses par rapport à ce contenu généré. J'ai compris qu'on pouvait utiliser l'API de simple_form pour modifier ce rendu, mais j'ai pas trouvé de solution pour faire ce que je voulais faire:
1. Placer l'astérisque à droite plutôt qu'à gauche du label (Email *). J'ai trouvé !
2. Indiquer l'hint et l'error directement dans l'attribut "title" (si error existe, on n'indique pas l'hint) .plutôt que dans un div.

Z'auriez une idée de comment procéder ?


RE: [Résolu][Rails] Modifier le form helper - Sephi-Chan - 15-01-2013

En modifiant le form builder de Simple form, à nouveau. :p


RE: [Résolu][Rails] Modifier le form helper - Holy - 15-01-2013

C'était évident Big Grin

J'ai un soucis par rapport au custom builder. Quand j'utilise les données renseignées par la documentation de simple_form [ici], j'ai un message d'erreur :
undefined method `merge!' for nil:NilClass

Je comprends bien le message d'erreur, mais j'ai pas trop de solution :
class CyFormBuilder < SimpleForm::FormBuilder
def input(attribute_name, options = {}, &block)
options[:input_html].merge! :class => 'custom'
super
end
end

Et mon helper :
def cy_form_for(name, *args, &block)
options = args.extract_options!

simple_form_for(name, *(args << options.merge(:builder => CyFormBuilder)), &block)
end

Et enfin mon code de formulaire :
= cy_form_for @user, :url => register_path do |u|

.col-50
%h2 Héros

= u.input :contact_email
C'est un exemple tiré directement de la documentation. Ce que je pige pas, c'est que par défaut ma variable "options" devrait valoir {}. Merge fonctionne pas sur les hashs vides ? Si vous avez une piste.. ^^

Si il le faut, je peux push histoire que vous bidouillez directement sur le projet Big Grin (j'essaie de me mettre "à la mode" Git).


RE: [Résolu][Rails] Modifier le form helper - Plume - 16-01-2013

Ton message d'erreur ne parle pas pas d'un hash vide mais d'une valeur nil.

> {} == nil
=> false

Le problème est donc l'appel à merge! sur options[:input_html] qui ne vaut rien puisque comme tu le dis, options vaut {}.


RE: [Résolu][Rails] Modifier le form helper - Holy - 16-01-2013

J'ai corrigé comme ceci :
class CyFormBuilder < SimpleForm::FormBuilder
def input(attribute_name, options = {}, &block)
options[:input_html] = {} if options[:input_html].nil?
options[:input_html].merge! :class => 'test'
super
end
end
Ca marche, mais y a peut-être une meilleure façon de faire.