En ruby, quand tu fais un héritage et que tu ré-implémentes une méthode,
ça écrase la méthode mère. Dans cas, si tu fais
ExoDiscriminant.new.result_valid? c'est bien ExoDiscrimant#result_valid?
qui va être appelé et non Exo#result_valid? Transfères toute la logique
dans le modèle. Ne laisse rien dans le contrôleur. Tu peux utiliser le
paradigme "fat model skinny controler". Dans d'autres cas, il aurait été
mieux de faire des "services objects" ou des "form objects" mais dans ce
cas je crois que ce n'est pas approprié. Tu peux bouger le helper
correspondant à la classe. Dans la classe ExoDiscriminant tu peux bouger
DiscriminantHelper.
Ceci dit, dans ce cas précis je pense que faire un héritage c'est bien
mais en général, c'est mieux de faire de la composition. Tu peux
chercher "composition over inheritance" si tu veux.
Le 2015-04-15 18:08, Philippe Demaria a écrit :
Je vois ce que tu veux dire mais il y a une validation pour chaque exo.
Donc la méthode def result_valid? n'est pas unique.
Donc je ne peux rien mettre dedans
def result_valid?
# Ta méthode validate dans ton contrôleur. Je garde alors mon
controller avec la méthode dedans. c'est ça ?
/end /
/
/
/ def enunciated/
/ # Même chose que dans ton helper. /Lequel ? J'ai un helper par exo !
/ end/
Le mercredi 15 avril 2015 11:47:01 UTC-5, Guirec Corbel a écrit :
Je vais te donner un exemple potentiel (non testé) pour ton code.
class ExoDiscriminant
include Mongoid::Document
include Mongoid::Timestamps
field :title, type: String
field :text, type: String
field :help, type: String
field :time, type: Integer
field :reponseStudent, type: Integer
field :a, type: Integer
field :b, type: Integer
field :c, type: Integer
field :d, type: Integer
validates :title, presence: true
validates :text, presence: true
validates :time, presence: true
validates :help, presence: true
validates :reponseStudent, presence: true, on: :validation
validate :valid_answer, on: :update
def valid_answer
errors.add(:anwser, "Réponse fausse") unless result_valid?
end
def result_valid?
# Ta méthode validate dans ton contrôleur.
end
def enunciated
# Même chose que dans ton helper.
end
end
À partir de ça, dans ton contrôleur, tu n'a juste a changer la
classe instanciée. Tu peux ensuite utiliser la méthode
@exo.enunciated dans ta vue, à la place de ton helper.
Avec l'héritage tu auras une base comme ceci :
class Exo
# ...
def result_valid?
# une validation par défaut si tu en a
end
def enunciated
# un énoncé par défaut si tu en a
end
end
et des classes enfants comme ceci :
class ExoDiscriminant < Exo
def result_valid?
# Validation spécifique pour les discrimiants
end
def enunciated
# Énoncé spéfique
end
end
Est-ce que tu vois ce que je veux dire ?
Le 15 avril 2015 12:34, Philippe Demaria <demaria....@lfbogota.com
<javascript:>> a écrit :
Justement, je ne voudrais pas passer par le stockage en bdd.
les exercices étant alétoires, je ne veux pas utiliser
d'enregistrement en base de données. Comme cela avec un type
d'exo, j'ai une infinité d'exo.
Je vais potasser ton tuto rails : samurails.
Mais comme je vais avoir à peu près 1000 types d´exo
différents, j'essaie tout de suite de partir bien.....
Je ne comprends pas trop ton idée :
/D'après ce que je comprend, tu as uniquement le helper et la
validation qui change/. OUI
/La première chose à faire, ça serait de ramener ces deux
éléments dans le modèle/. Dans quel model ?
/Ta vue, ton controlleur et ton helper seront donc tous les
même. /Comment peuvent ils être les mêmes ?
Je dois un "peu" potasser.....
Le mercredi 15 avril 2015 09:26:12 UTC-5, Guirec Corbel a écrit :
Apparemment oui mais la solution est variables car les
variables ( au sens mathématique ) sont aléatoires. Les
solutions doivent donc êtres calculées.
Ça serait possible de stocker la formule dans la base de
données et de l’exécuter en faisant une interpolation des
variables. Si le chaîne "@a + @b - @c" est stockée, tu
peux faire un eval de cette chaîne pour vérifier le
résultat avec les variables. Je pense que ça peut fonctionner.
Le 15 avril 2015 10:20, thierry henrio
<thierry...@gmail.com> a écrit :
2015-04-15 16:02 GMT+02:00 Philippe Demaria
<demaria....@lfbogota.com>:
Voici les fichiers pour le calculs de relatifs par
exemple.
le model est le même
Est-ce qu'un exercice a une seule solution ?
?, Thierry
--
--
Vous avez reçu ce message, car vous êtes abonné au
groupe "Railsfrance" de Google Groups.
Pour transmettre des messages à ce groupe, envoyez un
e-mail à l'adresse rails...@googlegroups.com
Pour résilier votre abonnement envoyez un e-mail à
l'adresse railsfrance...@googlegroups.com
---
Vous recevez ce message, car vous êtes abonné au
groupe Google Groupes "Railsfrance".
Pour vous désabonner de ce groupe et ne plus recevoir
d'e-mails le concernant, envoyez un e-mail à l'adresse
railsfrance...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page
https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
--
Vous avez reçu ce message, car vous êtes abonné au groupe
"Railsfrance" de Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à
l'adresse rails...@googlegroups.com <javascript:>
Pour résilier votre abonnement envoyez un e-mail à l'adresse
railsfrance...@googlegroups.com <javascript:>
---
Vous recevez ce message, car vous êtes abonné au groupe
Google Groupes "Railsfrance".
Pour vous désabonner de ce groupe et ne plus recevoir
d'e-mails le concernant, envoyez un e-mail à l'adresse
railsfrance...@googlegroups.com <javascript:>.
Pour obtenir davantage d'options, consultez la page
https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
--
Vous avez reçu ce message, car vous êtes abonné au groupe
"Railsfrance" de Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à
l'adresse railsfrance@googlegroups.com
Pour résilier votre abonnement envoyez un e-mail à l'adresse
railsfrance-unsubscr...@googlegroups.com
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
"Railsfrance".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
concernant, envoyez un e-mail à l'adresse
railsfrance+unsubscr...@googlegroups.com
<mailto:railsfrance+unsubscr...@googlegroups.com>.
Pour obtenir davantage d'options, consultez la page
https://groups.google.com/d/optout.
--
--
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
railsfrance@googlegroups.com
Pour résilier votre abonnement envoyez un e-mail à l'adresse
railsfrance-unsubscr...@googlegroups.com
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Railsfrance.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant,
envoyez un e-mail à l'adresse railsfrance+unsubscr...@googlegroups.com.
Pour plus d'options, visitez le site https://groups.google.com/d/optout .