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 .