JeuWeb - Crée ton jeu par navigateur
[Résolu][Rails] Gestion des erreurs dans formulaire avec un objet non-ActiveRecord - 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] Gestion des erreurs dans formulaire avec un objet non-ActiveRecord (/showthread.php?tid=5707)

Pages : 1 2


RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - Sephi-Chan - 25-09-2011

Les méthodes de classe (aussi appelées méthodes statiques dans d'autres langages) sont à distinguer des méthodes d'instance.

Quelques méthodes de la classe ActiveRecord::Base : create, build, connection, uncached, etc.
Quelques méthodes d'instance de la classe ActiveRecord::Base : save, update_attribute, valid?, etc.


class Ant < ActiveRecord::Base
PRODUCTION_DURATION = 6.seconds

# Quelque chose de plus cross-database ne serait-il pas plus intéressant ?
def self.next_name_for(user)
sequence = "fourmis_#{user.username}_id_seq"
query = "SELECT nextval('#{sequence}')"
uncached { ActiveRecord::Base.connection.select_value(query) }
end
end

Ici, on définit une méthode de classe next_name_for. On sait que c'est une méthode de classe car elle est définie par self.next_name_for (on pourrait également la définir par Ant.next_name_for, mais c'est moins maintenable).

Un autre moyen de définir les méthodes de classe :


class Ant < ActiveRecord::Base
PRODUCTION_DURATION = 6.seconds

class << self
# Quelque chose de plus cross-database ne serait-il pas plus intéressant ?
def next_name_for(user)
sequence = "fourmis_#{user.username}_id_seq"
query = "SELECT nextval('#{sequence}')"
uncached { ActiveRecord::Base.connection.select_value(query) }
end
end
end

La méthode de classe uncached marche donc puisqu'on est dans le contexte de la classe Ant (qui hérite de ActiveRecord::Base). Si tu en as besoin ailleurs, tu n'as qu'à appeler Ant.uncached (ou n'importe quel modèle).


Concernant ta méthode product_ants!, voici ce que je propose. Ce n'est pas testé et tu devras peut-être retoucher, mais au moins tu auras le concept.


class Ant < ActiveRecord::Base
PRODUCTION_DURATION = 8.hours
DELAY_BETWEEN_PRODUCTION = 6.seconds

def self.coming_after(time)
where('? < born', time)
# N'hésite pas à installer l'excellente gem Squeel pour pouvoir écrire (et plein d'autres trucs cools) :
# where { ? < born }
end


def self.next_name_for(user)
sequence = "fourmis_#{user.username}_id_seq"
query = "SELECT nextval('#{sequence}')"
uncached { ActiveRecord::Base.connection.select_value(query) }
end
end


class City < ActiveRecord::Base
# Add few ants to the production queue.
def product_ants!(quantity)
now = Time.current
running_ant = ants.coming_after(now).last

# If an ant is running, queue the new ones after it. Else it starts now.
next_ant_starts_at = if running_ant
running_ant.born + Ant:Big GrinELAY_BETWEEN_PRODUCTION
else
now
end

0.upto(quantity) do
# Increment the next_ant_starts_at by production duration of this ant.
#
# NOTE: On pourrait utiliser directement l'expression dans le hash,
# mais c'est plus clair et lisible de passer par une variable born_at.
born_at = (next_ant_starts_at += (Ant:TongueRODUCTION_DURATION + Ant:Big GrinELAY_BETWEEN_PRODUCTION))

ants.create!(
sort: Ant::SORTS[rand(3)],
born: born_at,
name: Ant.next_name_for(user)
)
end
end
end

Pense à ne pas mettre de self inutiles comme self.ants ou self.user.
De même, même si ça ne coûte rien, n'utilise pas de variable d'instance (@foo) si ce n'est pas nécessaire.
Enfin, profite des méthodes avec un ! de Active Record, elles se chargeront de lancer des exceptions pour toi en cas de problème.



RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - Maz - 25-09-2011

J'ai eu a modifié comme prévu (sinon je me serais posé des questions ,p ). Je vais essayer de respecter ces standards dans mes prochains script et revoir ceux que j'ai déjà codé. Là je suis coincé (encore) avec des données PostGIS... M'enfin c'est une autre histoire, bonne soirée et encore merci ,)


RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - Sephi-Chan - 26-09-2011

(25-09-2011, 09:20 PM)Maz a écrit : J'ai eu a modifié comme prévu (sinon je me serais posé des questions ,p ). Je vais essayer de respecter ces standards dans mes prochains script et revoir ceux que j'ai déjà codé. Là je suis coincé (encore) avec des données PostGIS... M'enfin c'est une autre histoire, bonne soirée et encore merci ,)

C'est pas vraiment un standard, juste des conseils généraux. Smile
Par curiosité, qu'est-ce que tu as dû ajuster ?

Courage ! Et sinon ça te plaît Rails ou tu le vis plutôt comme un emmerdement ?


RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - Maz - 26-09-2011

J'ai ajusté juste les calculs.

Sincèrement; j'adore Rails =) même si effectivement je bûtes sur des trucs que j'aurais fait avec aisance sous PHP, j'adore le fait de coder "de la bonne façon"(même si c'est pas encore précisément le cas, mais faut pas m'en vouloir je ne connais pas encore toutes les fonctions du genre le upto: jamais vu ,P), certains trucs me titille (des trucs con genre le unless que j'ai eu un peu de mal a piger au début). Mais j'adore la puissance et vraiment on sent qu'avec Rails, on développes "du côté programmeur", tout est simplifié et fait pour la bonne expérience du programmeur. Maintenant je découvres Ruby + les frameworks, mon émerveillement aurais peut-être était semblable si j'avais simplement installer cakePHP, mais après moulte lecture d'article Ruby vs PHP, je suis assez dégouté de PHP qui finalement d'après ce que j'ai lu n'est qu'un langage "vite fait", pour vite apprendre(les mauvaise manière de programmer...). Après PHP reste je penses très bien, si on code proprement, mais aucun tutoriel n'apprends comment coder proprement (trouvez-moi un tuto qui commences par vous apprendre ce que sont les class, les frameworks etc...) après je penses qu'on peut atteindre un niveau avec php sans utilisé les class et tout ce qui permet de coder de façon propre qui suffis à la plupart des gens qui se dise "être programmeur de dingue, wesh wesh".
fait des journée codes comme j'ai l'habitude de faire avec mes week ends.
Je penses que PHP est très bien pour débuter dans la programmation, mais que l'évolution et d'un programmeur qui aimes vraiment ce qu'il fait ne peut se faire sur PHP. Ruby et Rails ont été pour moi un retour au sources, je réapprends des choses d'une différente façon, j'essaie de désapprendre les mauvaises manière. ça faisait longtemps que je n'avais plus était en mode gros kiff en programmant, depuis que je code avec RoR, je suis en kiff 3/jours quand je découvres une fonctionnalités de Rails à laquelle je n'avais jamais eu affaire.

En tout cas une chose est sur: je ne coderais plus en PHP.

Maintenant je trouves dommages que Ruby ne soit pas plus "facile" a mettre en place avec Windows de façon "propre". Personnellement j'ai pas mis longtemps avant de dégager windows et passer sur Ubuntu sur lequel je suis actuellement, car j'ai un peu l'esprit "tout ou rien", mais une personne qui tient vraiment à windows ou qui a vraiment peur de se lancer dans l'aventure, ça peut, je penses, être un blocage pour ce passage PHP > Ruby. Après j'ai été confronté a des problèmes sur windows auxquels la plupart des gens ne seront pas confrontés...


RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - Sephi-Chan - 27-09-2011

Content que ça te plaise, alors ! En plus, les demandes d'aide me permettent de mieux comprendre ce qui pose problème aux nouveaux venus, et donc d'insister sur ces points dans mes tutos.
Et c'est aussi pour ça que je développe les réponses aux posts ainsi : ça permet d'apprendre certaines astuces aux autres et éventuellement d'accrocher des curieux et les pousser à s'intéresser à Ruby. Wink


RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - popayan - 27-09-2011

(26-09-2011, 10:20 PM)Maz a écrit : J'ai ajusté juste les calculs.

Sincèrement; j'adore Rails =) même si effectivement je bûtes sur des trucs que j'aurais fait avec aisance sous PHP, j'adore le fait de coder "de la bonne façon"(même si c'est pas encore précisément le cas, mais faut pas m'en vouloir je ne connais pas encore toutes les fonctions du genre le upto: jamais vu ,P), certains trucs me titille (des trucs con genre le unless que j'ai eu un peu de mal a piger au début). Mais j'adore la puissance et vraiment on sent qu'avec Rails, on développes "du côté programmeur", tout est simplifié et fait pour la bonne expérience du programmeur. Maintenant je découvres Ruby + les frameworks, mon émerveillement aurais peut-être était semblable si j'avais simplement installer cakePHP, mais après moulte lecture d'article Ruby vs PHP, je suis assez dégouté de PHP qui finalement d'après ce que j'ai lu n'est qu'un langage "vite fait", pour vite apprendre(les mauvaise manière de programmer...). Après PHP reste je penses très bien, si on code proprement, mais aucun tutoriel n'apprends comment coder proprement (trouvez-moi un tuto qui commences par vous apprendre ce que sont les class, les frameworks etc...) après je penses qu'on peut atteindre un niveau avec php sans utilisé les class et tout ce qui permet de coder de façon propre qui suffis à la plupart des gens qui se dise "être programmeur de dingue, wesh wesh".
fait des journée codes comme j'ai l'habitude de faire avec mes week ends.
Je penses que PHP est très bien pour débuter dans la programmation, mais que l'évolution et d'un programmeur qui aimes vraiment ce qu'il fait ne peut se faire sur PHP. Ruby et Rails ont été pour moi un retour au sources, je réapprends des choses d'une différente façon, j'essaie de désapprendre les mauvaises manière. ça faisait longtemps que je n'avais plus était en mode gros kiff en programmant, depuis que je code avec RoR, je suis en kiff 3/jours quand je découvres une fonctionnalités de Rails à laquelle je n'avais jamais eu affaire.

En tout cas une chose est sur: je ne coderais plus en PHP.

Maintenant je trouves dommages que Ruby ne soit pas plus "facile" a mettre en place avec Windows de façon "propre". Personnellement j'ai pas mis longtemps avant de dégager windows et passer sur Ubuntu sur lequel je suis actuellement, car j'ai un peu l'esprit "tout ou rien", mais une personne qui tient vraiment à windows ou qui a vraiment peur de se lancer dans l'aventure, ça peut, je penses, être un blocage pour ce passage PHP > Ruby. Après j'ai été confronté a des problèmes sur windows auxquels la plupart des gens ne seront pas confrontés...

c'est marrant, ca pourrait tout à fait être moi qui est écrit ce post!
J'en profite pour remercier Sephi, ca fait vraiment plaisir de trouver quelqu'un qui nous "supportes" de la sorte Wink


RE: [Rails] Gestion des erreurs avec un formulaire non-lié avec un objet Active Record - Maz - 27-09-2011

(27-09-2011, 07:21 AM)popayan a écrit : c'est marrant, ca pourrait tout à fait être moi qui est écrit ce post!
J'en profite pour remercier Sephi, ca fait vraiment plaisir de trouver quelqu'un qui nous "supportes" de la sorte Wink

Je penses la même chose popayan: ça pourrais etre moi qui ai écrit ce post et chapo sephi ,p