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 .

Répondre à