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