Mon exo qui englobe tous les autres : *model* : exo_alea.rb
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: Float field :a, type: Float field :b, type: Float field :c, type: Float field :d, type: Float field :e, type: Float field :f, type: Float field :g, type: Float field :h, type: Float 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 *controller*: exo_aleas_controller.rb class ExoAleasController < ApplicationController before_action :authenticate_teacher! before_action :set_exo_alea, only: [:show, :edit, :update, :destroy, :validation] # GET /exo_discriminants/new def new @exo_alea = ExoAlea.new end # GET /exo_discriminants/1/edit def edit end # POST /exo_discriminants # POST /exo_discriminants.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: 'Exercice sur le exo_alea créé avec succès.' } format.json { render :show, status: :created, location: @exo_alea } else format.html { render :new } format.json { render json: @exo_alea.errors, status: :unprocessable_entity } end end end # GET /exo_aleas/1 # GET /exo_aleas/1.json def show @exo_aleas = ExoAlea.find(params[:id]) end # PATCH/PUT /exo_aleas/1 # PATCH/PUT /exo_aleas/1.json def update respond_to do |format| if @exo_alea.update(exo_alea_params) format.html { redirect_to @exo_alea, notice: "L'exercice a été mis à jour avec succès"} 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 private # Use callbacks to share common setup or constraints between actions. def set_exo_alea @exo_alea = ExoAlea.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def exo_alea_params params.require(:exo_alea).permit(:time, :title, :text, :help, :reponseStudent) end end *Ma vue *show.html.erb <div class="row"> <div class="large-12 columns title_exercise"> <h4><%= @exo_alea.title %> </h4> <h6><%= fa_icon("barcode")%> <%= @exo_alea.id %><%= fa_icon("clock-o")%><%= @exo_alea.time %> minutes</h6> <hr> </div> <div class="large-12 columns title_exercise"> <%= @exo_alea.text %> </div> <%= simple_form_for @exo_alea, defaults: { label: false } do |f| %> <div class="large-12 columns question_text"> <div class="large-8 columns"> <%= @exo_alea.enunciated %> </div> <div class="large-4 columns"> <div class="row collapse prefix-radius"> <div class="small-3 columns"> <span class="prefix">$ A = $</span> </div> <div class="small-9 columns"> <%= f.input :reponseStudent, placeholder: "Valeur de A" %> <%= f.input :a, as: :hidden, input_html: {value: @a} %> <%= f.input :b, as: :hidden, input_html: {value: @b} %> <%= f.input :c, as: :hidden, input_html: {value: @c} %> <%= f.input :d, as: :hidden, input_html: {value: @d} %> </div> </div> </div> </div> <% if @error %> <div class="large-12 columns question_help"> <div id="valid_help"> <%= fa_icon("cogs", class: "fa-3x") %> <%= @exo_alea.help %></div> </div> <% end %> <div class="form-actions"> <%= f.button :submit, "Valider la réponse" %> </div> <% end %> <% if teacher_signed_in? %> <div class="large-12 columns"> <%= link_to 'Modifier', edit_exo_alea_path(@exo_alea) %> </div> <% end %> </div> *ma route :* routes.rb resources :exo_aleas, except: [ :index ] get '/exo_aleas/:id' => 'exo_aleas#show' ---- ça ce sont mes fichiers qui englobe tous les exercices. Puis après, j'ai un type d'exercice particulier. Je viens faire un qui s'appelle exo_prodrelatifs, sur le produit de relatifs. J'e n'ai donc que le model à écrire. Le voici class ExoProdrelatif < ExoAlea def result_valid? resultat = params[:exo_sumrelatif][:a].to_i * params[:exo_sumrelatif][:b].to_i * params[:exo_sumrelatif][:c].to_i * params[:exo_sumrelatif][:d].to_i if params[:exo_sumrelatif][:reponseStudent].to_i == resultat flash[:success] = "Bonne réponse" redirect_to action: 'show' else flash.now[:error] = "Réponse fausse" @a = params[:exo_sumrelatif][:a].to_i @b = params[:exo_sumrelatif][:b].to_i @c = params[:exo_sumrelatif][:c].to_i @d = params[:exo_sumrelatif][:d].to_i @error = true render :show end end def enunciated @a=rand(10)-rand(10) @b=rand(20)-rand(20) @c=rand(20)-rand(20) @d=rand(20)-rand(20) return "$ #{a} \\times #{b} \\times #{c} \\times #{d} $" end end ==== et comment je l'appelles cet exercice sur les produit de relatifs ? Quelle routes ? -- -- 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 .