Mince parti trop vite. 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 Merci infiniment. Le jeudi 16 avril 2015 07:04:57 UTC-5, Philippe Demaria a écrit : > > 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> 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 >>> 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 plus d'options, visitez le site https://groups.google.com/d/optout .