Ça commence à ressembler à quelque chose de bien. Je pense que tu bouger
ceci :

    @a=rand(20)-rand(20)
    @b=rand(2..7)
    @c=rand(20)-rand(20)
    @d=rand(2..7)

dans ton modèle.

Normalement, ta vue sera dans
app/views/ton_controlleur_au_pluriel/ton_action.html.erb. Pour ton
contrôleur, ça dépend de ce que tu veux. D'après ce que je comprends tu à
la possibilité de créer/modifier/supprimer des exercices. Pour moi, tu
devrais créer un contrôleur pour ajouter une nouvelle réponse. Je crois que
je créer un "AnswersController". Tu vue sera donc dans
app/views/answers/new.html.erb.

Au niveau de l'instanciation, c'est le Single Table Inheritance (STI),
comme dans le lien que je t'ai fourni. Si tu un classe ExoDisc qui hérite
de Exo, tu peux faire Exo.find(id) et il va te retourner une classe de type
"ExoDisc".

Si tu veux simplifier ton controlleur, tu peux utiliser
https://github.com/plataformatec/responders et
https://github.com/hashrocket/decent_exposure .

J'aime bien aidé les gens quand c'est un problème que je connais bien. Je
pense que la communauté Ruby est plus petite que celle de PHP mais très
altruiste. Si tu étais proche, je serai probablement venu t'aider.

Le 16 avril 2015 08:06, Philippe Demaria <demaria.phili...@lfbogota.com> a
écrit :

> 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 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 .

Répondre à