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.phili...@lfbogota.com> 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.
>>>
>>
>>  --
> --
> 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 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 .

Répondre à