C'est juste parfait... J'ai donc écris le code ci dessous.

*Model :*
je crée un model générique :

class ExoAlea
  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?
    #  une validation par défaut
  end 

  def enunciated
   #  un enoncé par défaut
  end
end

puis un model par exercice spécifique :
class ExoDiscriminant < ExoAlea
  def result_valid?
     # Validation spécifique
  end

  def enunciated
    # Énoncé spéfique
  end
end

*Question 1 : Donc si j'ai 1000 exos, j'aurais 1000 models specifiques ?*

*Views*
Dans ma vue show , j'utilise la méthode @exoAlea.enunciated et j'enlève le 
helper. 
J'aurai donc une seule vue pour tous mes 1000 exercices. C'est top ! 


*Question 2 : Ma vue show.html.erb doit être dans le dossier app/exoAlea ? 
ou dans le dossier app/Exo_discriminant ? ou dans layout ?*

*Controller *

Comment se nomme ce controller ? exo_alea_controller ou 
exo_discriminant_controller ? 

Dans le contrôleur, te me dis "tu n'a juste a changer la classe instanciée".
Si je comprends bien c'est le controller qui se nomme exo_alea_controller.
Dans ce controller, comment je change la classe instanciée ? je peux la 
nommée @exoAlea.enunciated ?

*Question 3 : J'ai un unique controller ou 1000 controllers ?*

*Question 4 : Est ce que le controller resemble donc à ça ?*

class ExoAleaController < ApplicationController
  before_action :set_exo_alea, only: [:show, :edit, :update, :destroy, 
:validation]

  # GET /exo_alea 
  # GET /exo_alea.json
  def index
    @exo_alea= ExoAlea.all
  end

  # GET /exo_alea/1
  # GET /exo_alea/1.json
  def show
    @exo_alea= ExoAlea.find(params[:id])
    @a=rand(20)-rand(20)
    @b=rand(2..7)
    @c=rand(20)-rand(20)
    @d=rand(2..7) 
  end

  # GET /exo_alea/new
  def new
    @exo_alea= ExoAlea.new
  end

  # GET /exo_alea/1/edit
  def edit
  end

  # POST /exo_alea  
  # POST /exo_alea.json
  def create
    @exo_alea= ExoAlea.new(exo_alea_params)

    respond_to do |format|
      if @exo_alea.save
        format.html { redirect_to @exo_alea, notice: 'Exo sumfraction was 
successfully created.' }
        format.json { render :show, status: :created, location: 
@exo_sumfraction }
      else
        format.html { render :new }
        format.json { render json: @exo_alea.errors, status: 
:unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /exo_sumfractions/1
  # PATCH/PUT /exo_sumfractions/1.json
  def update
    respond_to do |format|
      if @exo_alea.update(exo_alea_params)
        format.html { redirect_to @exo_alea, notice: 'Exo alea was 
successfully updated.' }
        format.json { render :show, status: :ok, location: @exo_alea}
      else
        format.html { render :edit }
        format.json { render json: @exo_alea.errors, status: 
:unprocessable_entity }
      end
    end
  end

  # DELETE /exo_alea/1
  # DELETE /exo_alea/1.json
  def destroy
    @exo_alea.destroy
    respond_to do |format|
      format.html { redirect_to exo_alea_url, notice: 'Exo alea was 
successfully destroyed.' }
      format.json { head :no_content }
    end
  end

    private

    def set_exo_alea
      @exo_alea= ExoAlea.find(params[:id])
    end

    def exo_alea_params
      params.require(:exo_alea).permit(:title, :text, :help, :string, :time)
    end

end

Bon quand tu auras répondu à ces 4 questions, j'espère que tu m'auras donné 
la solution.

Merci infiniment.

Le jeudi 16 avril 2015 06:57:17 UTC-5, Guirec Corbel a écrit :
>
> 1 controlleur, une vue, 1 modèle de base et des modèles enfants pour la 
> logique spécifique de chaque exercice.
>
> Le 16 avril 2015 07:56, Philippe Demaria <demaria....@lfbogota.com 
> <javascript:>> a écrit :
>
>> la question que je me pose est :
>> pour 1000 exos, combien de controlle, de model et de vues ?
>>
>>
>> Le jeudi 16 avril 2015 06:49:47 UTC-5, Guirec Corbel a écrit :
>>>
>>> Je pense qu'il faudrait que tu utilises l'action new pour afficher le 
>>> questionnaire et que tu fasses la validation dans create. Il faut essayé de 
>>> correspondre à une interface CRUD le plus possible. Si ces actions sont 
>>> déjà prises, je pense que tu devrais créer un nouveau contrôleur. 
>>>
>>> Le 15 avril 2015 21:11, Philippe Demaria <demaria....@lfbogota.com> a 
>>> écrit :
>>>
>>>> Dans ma vue show, j'ai 
>>>> <%= simple_form_for @exo_alea, :url => {:controller => "exo_aleas", 
>>>> :action => "validation"},  defaults: { label: false } do |f| %>
>>>>
>>>> Dans le cas utilisé danbs mon précédent post, 
>>>> je dois changer :url => {:controller => "exo_aleas", :action => 
>>>> "validation"}. Je mets quoi à la place ?
>>>>
>>>> Merci.
>>>>
>>>>
>>>>
>>>>
>>>> Le mercredi 15 avril 2015 19:05:26 UTC-5, Philippe Demaria a écrit :
>>>>>
>>>>> D'après ce que je comprends : 
>>>>>
>>>>> Considérons que je veux créer 1000 exercices aléatoires
>>>>>
>>>>> *... eh oui !Model :*
>>>>> je crée un model générique :
>>>>>
>>>>> class ExoAlea
>>>>>   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?
>>>>>     #  une validation par défaut
>>>>>   end 
>>>>>
>>>>>   def enunciated
>>>>>    #  un enoncé par défaut
>>>>>   end
>>>>> end
>>>>>
>>>>> puis un model par exercice spécifique :
>>>>> class ExoDiscriminant < ExoAlea
>>>>>   def result_valid?
>>>>>      # Validation spécifique
>>>>>   end
>>>>>
>>>>>   def enunciated
>>>>>     # Énoncé spéfique
>>>>>   end
>>>>> end
>>>>>
>>>>> *Question 1 : Donc si j'ai 1000 exos, j'aurais 1000 models specifiques 
>>>>> ?*
>>>>>
>>>>> *Views*
>>>>> Dans ma vue show , j'utilise la méthode @exoAlea.enunciated et 
>>>>> j'enlève le helper. 
>>>>> J'aurai donc une seule vue pour tous mes 1000 exercices. C'est top ! 
>>>>>
>>>>>
>>>>> *Question 2 : Ma vue show.html.erb doit être dans le dossier 
>>>>> app/exoAlea ? ou dans le dossier app/Exo_discriminant ? ou dans layout ?*
>>>>>
>>>>> *Controller *
>>>>>
>>>>> Comment se nomme ce controller ? exo_alea_controller ou 
>>>>> exo_discriminant_controller ? 
>>>>>
>>>>> Dans le contrôleur, te me dis "tu n'a juste a changer la classe 
>>>>> instanciée".
>>>>> Si je comprends bien c'est le controller qui se nomme 
>>>>> exo_alea_controller.
>>>>> Dans ce controller, comment je change la classe instanciée ? je peux 
>>>>> la nommée @exoAlea.enunciated ?
>>>>>
>>>>> *Question 3 : J'ai un unique controller ou 1000 controllers ?*
>>>>>
>>>>> *Question 4 : Est ce que le controller resemble donc à ça ?*
>>>>>
>>>>> class ExoAleaController < ApplicationController
>>>>>   before_action :set_exo_alea, only: [:show, :edit, :update, 
>>>>> :destroy, :validation]
>>>>>
>>>>>   # GET /exo_alea 
>>>>>   # GET /exo_alea.json
>>>>>   def index
>>>>>     @exo_alea= ExoAlea.all
>>>>>   end
>>>>>
>>>>>   # GET /exo_alea/1
>>>>>   # GET /exo_alea/1.json
>>>>>   def show
>>>>>     @exo_alea= ExoAlea.find(params[:id])
>>>>>     @a=rand(20)-rand(20)
>>>>>     @b=rand(2..7)
>>>>>     @c=rand(20)-rand(20)
>>>>>     @d=rand(2..7) 
>>>>>   end
>>>>>
>>>>>   # GET /exo_alea/new
>>>>>   def new
>>>>>     @exo_alea= ExoAlea.new
>>>>>   end
>>>>>
>>>>>   # GET /exo_alea/1/edit
>>>>>   def edit
>>>>>   end
>>>>>
>>>>>   # POST /exo_alea  
>>>>>   # POST /exo_alea.json
>>>>>   def create
>>>>>     @exo_alea= ExoAlea.new(exo_alea_params)
>>>>>
>>>>>     respond_to do |format|
>>>>>       if @exo_alea.save
>>>>>         format.html { redirect_to @exo_alea, notice: 'Exo sumfraction 
>>>>> was successfully created.' }
>>>>>         format.json { render :show, status: :created, location: 
>>>>> @exo_sumfraction }
>>>>>       else
>>>>>         format.html { render :new }
>>>>>         format.json { render json: @exo_alea.errors, status: 
>>>>> :unprocessable_entity }
>>>>>       end
>>>>>     end
>>>>>   end
>>>>>
>>>>>   # PATCH/PUT /exo_sumfractions/1
>>>>>   # PATCH/PUT /exo_sumfractions/1.json
>>>>>   def update
>>>>>     respond_to do |format|
>>>>>       if @exo_alea.update(exo_alea_params)
>>>>>         format.html { redirect_to @exo_alea, notice: 'Exo alea was 
>>>>> successfully updated.' }
>>>>>         format.json { render :show, status: :ok, location: @exo_alea}
>>>>>       else
>>>>>         format.html { render :edit }
>>>>>         format.json { render json: @exo_alea.errors, status: 
>>>>> :unprocessable_entity }
>>>>>       end
>>>>>     end
>>>>>   end
>>>>>
>>>>>   # DELETE /exo_alea/1
>>>>>   # DELETE /exo_alea/1.json
>>>>>   def destroy
>>>>>     @exo_sumfraction.destroy
>>>>>     respond_to do |format|
>>>>>       format.html { redirect_to exo_alea_url, notice: 'Exo alea was 
>>>>> successfully destroyed.' }
>>>>>       format.json { head :no_content }
>>>>>     end
>>>>>   end
>>>>>
>>>>>     private
>>>>>
>>>>>     def set_exo_alea
>>>>>       @exo_sumfraction = ExoSumfraction.find(params[:id])
>>>>>     end
>>>>>
>>>>>     def exo_alea_params
>>>>>       params.require(:exo_alea).permit(:title, :text, :help, :string, 
>>>>> :time)
>>>>>     end
>>>>>
>>>>> end
>>>>>
>>>>> Bon quand tu auras répondu à ces 4 questions, j'espère que tu m'auras 
>>>>> donné la solution.
>>>>>
>>>>> Merci infiniment.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>  -- 
>>>> -- 
>>>> 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 
>> 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.
>>
>
>

-- 
-- 
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 à