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 *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 1 : 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 2 : 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 2 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 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 .