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


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

Meilleure, je ne sais pas. Plus concise, oui.


class CyFormBuilder < SimpleForm::FormBuilder
def input(attribute_name, options = {}, &block)
options[:input_html] ||= {}
options[:input_html].merge! :class => 'test'
super
end
end



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

L'opérateur ||= assigne la valeur renseignée que si l'objet est nil ? (en toute logique)

Sinon, autre chose, comment on fait pour débugger un helper ? J'utilise Rails.logger.debug mais j'trouve pas de trace de log dans mon dossier log ^^


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

nil ou false. Les logs sont dans development.log (ou autre, selon l'environnement).


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

Je suis parvenu à récupérer les erreurs liées au champ mais je trouve rien dans l'API à propos des hints.

Code :
class CyFormBuilder < SimpleForm::FormBuilder
  def input(name, options = {}, &block)
    error = object.errors[name.to_sym].blank? ? nil : object.errors[name.to_sym]
    hint = ...
    options[:input_html] ||= {}
    options[:input_html].merge! :title => error
    super
  end
end

(Désolé pour toutes ces demandes un peu futiles. Je participe à un google group "ruby-debutant" dont l'objectif est de créer un espace communautaire dédié aux devs junior de Rails, j'aurai l'occasion d'aller poser toutes mes questions là-bas quand ça sera plus concret).


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

J'ai un soucis d'encodage visiblement. Dès que je mets un accent dans une chaîne d'un modèle, d'un helper, ... j'ai droit à un message d'erreur "We're sorry, but something went wrong." Ca correspond à ce bug : http://www.stefanwille.com/2010/08/ruby-on-rails-fix-for-invalid-multibyte-char-us-ascii/

Y a aucun moyen de corriger ça à travers toute l'appli ? (Normalement j'aurai pas beaucoup de fichiers avec ce genre de caractères mais bon...)


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

Tu mets en haut du fichier qui contient l'accent :

# encoding: utf-8

Mais a priori, aucun modèle ne devrait avoir à renvoyer des chaînes riches.


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

(17-01-2013, 08:40 AM)Sephi-Chan a écrit : Tu mets en haut du fichier qui contient l'accent :

# encoding: utf-8

Mais a priori, aucun modèle ne devrait avoir à renvoyer des chaînes riches.
J'ai un modèle Game qui renvoie certaines constantes propres au jeu dans son ensemble. Une des constantes renseigne les nations de l'univers du jeu. J'ai pensé utiliser l'internationalisation, histoire de taper ça dans mon fichier fr.yml, mais j'ai droit à une erreur :
Code :
undefined method `t' for Game:Class

class Game
NATION = [t('nation.klum'), t('nation.garn'), t('nation.ulysk'), t('nation.ludwynn')]
end

Edition : Ok, j'ai trouvé. Forcément si je renseigne pas la classe dont dépend la méthode, ça peut pas marcher. J'ai corrigé en I18n.t.


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

Je te suggère de faire autrement.

Déjà, utiliser une classe Nation, plus appropriée.


class Nation
NAMES = %w( klum garn ulysk ludwynn )
end

Et seulement à l'affichage, dans une vue où le helper t est disponible (sans avoir à spécifier I18n). Au choix :


t([ 'nations', nation_name ])
t(nation_name, scope: 'nations')



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

Ok, ça me semble plus logique. Juste une chose, j'utilise ce tableau également pour créer un champ select dans ma vue. Avec simple_form, j'utilise l'option :collection pour renseigner mon tableau.

Du coup je sais pas trop comment faire pour renseigner un tableau complet ^^ J'ai trouvé une solution, mais j'suis pas sûr que ça soit top ^^
 = h.input :nation, :collection => t('nations').map {|k, v| [v, k]}

Autre chose, j'aimerais mettre en place une fonction ajax qui change le contenu d'un select en fonction de ce champ (les races diffèrent selon le choix de la race). Pour ça, ça devrait aller, mais je ne sais pas trop comment faire en sorte que la validation de mon champ prenne en compte cette condition ^^

En gros, j'ai ceci dans ma classe Hero :
  validates :nation, :presence => true,
:inclusion => { :in => Nation::NAMES }

validates :race, :presence => true,
:inclusion => { :in => Race::NAMES .... ? }

Et ma classe Race :
class Race
NAMES = { 'klum' => %w( dwarf, human ), 'ulysk' => %w( elf, dwarf, human ) }
end



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

(17-01-2013, 10:19 PM)Holy a écrit : Ok, ça me semble plus logique. Juste une chose, j'utilise ce tableau également pour créer un champ select dans ma vue. Avec simple_form, j'utilise l'option :collection pour renseigner mon tableau.

Du coup je sais pas trop comment faire pour renseigner un tableau complet ^^ J'ai trouvé une solution, mais j'suis pas sûr que ça soit top ^^


= h.input :nation, :collection => t('nations').map {|k, v| [v, k]}

Je ne comprends pas trop pourquoi fais un map sur ce qui semble être une chaîne ( t('nations')).



= h.input :nation, collection: Nation::NAMES.map { |name| [ name, t([ 'nations', name ]) }

Ainsi, le map te donnera un tableau de tableaux. Tu devras peut-être inverser les 2 éléments du tableau (l'un sert de libellé, l'autre d'attribut value), mais l'idée y est.


(17-01-2013, 10:19 PM)Holy a écrit : Autre chose, j'aimerais mettre en place une fonction ajax qui change le contenu d'un select en fonction de ce champ (les races diffèrent selon le choix de la race). Pour ça, ça devrait aller, mais je ne sais pas trop comment faire en sorte que la validation de mon champ prenne en compte cette condition ^^

Tu peux faire quelque chose comme :


class Race
NAMES = { 'klum' => %w( dwarf human ), 'ulysk' => %w( elf dwarf human ) }
end


class Hero < ActiveRecord::Base
validates :nation, presence: true, inclusion: { in: Nation::NAMES }
validates :race, presence: true, inclusion: { in: lambda { |hero| Race::NAMES[hero.race] } }
end