Forum: Rails France undefined method `all' for Module:Class

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-07-28 09:51
Bonjour,

  Je me trouve dans une impasse. J'obtiens le message d'erreur suivant
quand je souhaite afficher la page d'accueil de mes modules
(monserveur/modules) :

undefined method `all' for Module:Class

J'ai utilisé le scaffold pour générer mon contrôleur module... Pour mes
autres contrôleurs, tout se passe très bien! Le code est identique.

mon modèle contient :

class Module < ActiveRecord::Base
end

mon contrôleur :

class ModulesController < ApplicationController
  # GET /modules
  # GET /modules.xml
  def index
    @modules = Module.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @modules }
    end
  end

  # GET /modules/1
  # GET /modules/1.xml
  def show
    @module = Module.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @module }
    end
  end

  # GET /modules/new
  # GET /modules/new.xml
  def new
    @module = Module.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @module }
    end
  end

  # GET /modules/1/edit
  def edit
    @module = Module.find(params[:id])
  end

  # POST /modules
  # POST /modules.xml
  def create
    @module = Module.new(params[:module])

    respond_to do |format|
      if @module.save
        flash[:notice] = 'Module was successfully created.'
        format.html { redirect_to(@module) }
        format.xml  { render :xml => @module, :status => :created,
:location => @module }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @module.errors, :status =>
:unprocessable_entity }
      end
    end
  end

  # PUT /modules/1
  # PUT /modules/1.xml
  def update
    @module = Module.find(params[:id])

    respond_to do |format|
      if @module.update_attributes(params[:module])
        flash[:notice] = 'Module was successfully updated.'
        format.html { redirect_to(@module) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @module.errors, :status =>
:unprocessable_entity }
      end
    end
  end

  # DELETE /modules/1
  # DELETE /modules/1.xml
  def destroy
    @module = Module.find(params[:id])
    @module.destroy

    respond_to do |format|
      format.html { redirect_to(modules_url) }
      format.xml  { head :ok }
    end
  end
end

Lors de la génération manuelle du scaffold, j'ai bien utilisé un nom au
singulier 'module'

Concernant les liaisons avec les autres tables dans le fichier routes,
j'ai :


  map.resources :modules, :belongs_to => :autres


  map.resources :autres, :has_many => :modules


je ne comprends pas pourquoi j'obtiens ce message d'erreur et seulement
sur au niveau ce contrôleur ? Surement une erreur d'inattention mais
laquelle. y a t-il quelque d'incorrect dans tout ce code ?
4f81c4625f783336298267bb2dcfc8e3?d=identicon&s=25 Tranquiliste (Guest)
on 2009-07-28 10:07
(Received via mailing list)
Déjà tes relation has_many et belogns_to il faut les mettre au niveau
de tes modèles (module et autre) et pas dans le fichier routes.
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2009-07-28 10:12
(Received via mailing list)
Appeller une classe module, quelle bonne idée. Je n'en vois qu'une de
meilleur, appeller un module Class ou une class Class, ou un module
Module...

Mots-clefs réservés du langage : pas touche.

Michel Belleville


2009/7/28 Darty Box <list-incoming@andreas-s.net>
E33fbbb8d778a5e2019138d680f23d68?d=identicon&s=25 Thomas (Guest)
on 2009-07-28 11:06
(Received via mailing list)
He oui, parfois on découvre comme ça des mots réservés.

Moi j'avais appelé un modèle Thread, et un autre Action. Et ça, il aime
pas Rails...

Le plus ***ant de tous, c'est la colonne "type" pour un modèle quand on
utilise la STI (Single Table Inheritance)... Rails nous force plus ou
moins à écrire un controlleur différent pour chaque modèle héritant. Car
quand on veut passer le type en paramètre d'un formulaire il ne veut pas
sauver le champ "type" du modèle. Il faut alors faire un truc pas joli
pour que ça marche.


Michel Belleville a écrit :
98d4d4be867fc17d3120f683513d3819?d=identicon&s=25 Guillaume Betous (Guest)
on 2009-07-28 11:13
(Received via mailing list)
> Appeller une classe module, quelle bonne idée.


Je pense que la bonne idée serait surtout de générer un bon Warning,
voire-meme carrément une erreur ! C'est un peu énervant de se trouver
devant
un message aussi creux, alors que l'erreur est simplissime à prévoir.

gUI

--
Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2009-07-28 12:22
(Received via mailing list)
Le code source de Ruby est ouvert, si tu veux le modifier pour faire un
bon
gros warning, voir même carrément une erreur quand on fait une connerie
comme ça, c'est possible...

Michel Belleville


2009/7/28 Guillaume Betous <guillaume.betous@gmail.com>
98d4d4be867fc17d3120f683513d3819?d=identicon&s=25 Guillaume Betous (Guest)
on 2009-07-28 14:18
(Received via mailing list)
Pas con. Ca me rappellera mes études et mes cours de compilateur !

gUI

Le 28 juillet 2009 12:21, Michel Belleville
<michel.belleville@gmail.com> a
écrit :

>> Appeller une classe module, quelle bonne idée.
>> Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
>> Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
>> Suite bureautique : http://fr.openoffice.org/
>>
>>
>>
>>
>
> >
>


--
Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-07-29 09:44
Quand j'ai exécute la commande "route relation" => il m'a placé mes
"has_many" dans routes.rb

Concernant les noms des tables (modules par exemple), ce n'est pas moi
qui les choisis car je récupère ils correspondent à une interprétation
d'un autre fichier que l'on me transmet et il doit obligatoirement y
avoir une correspondance entre les noms pour la suite...

Et en ce qui concerne l'erreur, elle était conne mais elle est résolue.
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2009-07-29 09:59
(Received via mailing list)
>
> Concernant les noms des tables (modules par exemple), ce n'est pas moi
> qui les choisis car je récupère ils correspondent à une interprétation
> d'un autre fichier que l'on me transmet et il doit obligatoirement y
> avoir une correspondance entre les noms pour la suite...


Alors bonne chance. Perso si un décideur essayait de m'imposer le nom
des
classes que j'emploie sans écouter de contre-argument quand c'est un
mot-clef réservé du langage, je demande à être changé de projet parce
que ça
va être une death march avec un clampin pareil. Il y a déjà plein de
raisons
pour lesquelles un projet peut dérailler, ça ne vaut pas le coup d'en
ajouter une complètement idiote et arbitraire.

Michel Belleville
98d4d4be867fc17d3120f683513d3819?d=identicon&s=25 Guillaume Betous (Guest)
on 2009-07-29 15:58
(Received via mailing list)
pareil.

considère sérieusement d'avoir des tables internes qui ne correspondent
pas
au fichier en question. bien documenté, c'est pas un soucis de
maintenance.

gUI

Le 29 juillet 2009 09:57, Michel Belleville
<michel.belleville@gmail.com> a
écrit :

> pour lesquelles un projet peut dérailler, ça ne vaut pas le coup d'en
> ajouter une complètement idiote et arbitraire.
>
> Michel Belleville
>
> >
>


--
Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/
Df47128d1dbf6c0af1da1ca5293e116b?d=identicon&s=25 Meshak (Guest)
on 2009-07-30 14:27
(Received via mailing list)
Pour notre culture générale, une liste de mots-clés réservés en Rails
(qui varie en fonction de la base de données) :

http://wiki.rubyonrails.org/rails/pages/ReservedWords

Pour ma part, j'ai mis du temps à comprendre que je ne pouvais pas
appeler ma table "config"...

--
Julien Vignolles
5183febd0dfb911f94c270ddd174fe71?d=identicon&s=25 guillaume belleguic (Guest)
on 2009-07-30 14:41
(Received via mailing list)
très utile merci

Le 30 juillet 2009 14:26, Meshak <julien.vignolles@gmail.com> a écrit :
2c3eea510cf6eb33370a14bcb4e451cd?d=identicon&s=25 Francky Andy (rfrancky)
on 2010-04-20 15:18
ben ******* wrote:
> Bonjour,
>
>   Je me trouve dans une impasse. J'obtiens le message d'erreur suivant
> quand je souhaite afficher la page d'accueil de mes modules
> (monserveur/modules) :
>
> undefined method `all' for Module:Class
>
> J'ai utilisé le scaffold pour générer mon contrôleur module... Pour mes
> autres contrôleurs, tout se passe très bien! Le code est identique.
>
> mon modèle contient :
>
> class Module < ActiveRecord::Base
> end
>
> mon contrôleur :
>
> class ModulesController < ApplicationController
>   # GET /modules
>   # GET /modules.xml
>   def index
>     @modules = Module.all
>
>     respond_to do |format|
>       format.html # index.html.erb
>       format.xml  { render :xml => @modules }
>     end
>   end
>
>   # GET /modules/1
>   # GET /modules/1.xml
>   def show
>     @module = Module.find(params[:id])
>
>     respond_to do |format|
>       format.html # show.html.erb
>       format.xml  { render :xml => @module }
>     end
>   end
>
>   # GET /modules/new
>   # GET /modules/new.xml
>   def new
>     @module = Module.new
>
>     respond_to do |format|
>       format.html # new.html.erb
>       format.xml  { render :xml => @module }
>     end
>   end
>
>   # GET /modules/1/edit
>   def edit
>     @module = Module.find(params[:id])
>   end
>
>   # POST /modules
>   # POST /modules.xml
>   def create
>     @module = Module.new(params[:module])
>
>     respond_to do |format|
>       if @module.save
>         flash[:notice] = 'Module was successfully created.'
>         format.html { redirect_to(@module) }
>         format.xml  { render :xml => @module, :status => :created,
> :location => @module }
>       else
>         format.html { render :action => "new" }
>         format.xml  { render :xml => @module.errors, :status =>
> :unprocessable_entity }
>       end
>     end
>   end
>
>   # PUT /modules/1
>   # PUT /modules/1.xml
>   def update
>     @module = Module.find(params[:id])
>
>     respond_to do |format|
>       if @module.update_attributes(params[:module])
>         flash[:notice] = 'Module was successfully updated.'
>         format.html { redirect_to(@module) }
>         format.xml  { head :ok }
>       else
>         format.html { render :action => "edit" }
>         format.xml  { render :xml => @module.errors, :status =>
> :unprocessable_entity }
>       end
>     end
>   end
>
>   # DELETE /modules/1
>   # DELETE /modules/1.xml
>   def destroy
>     @module = Module.find(params[:id])
>     @module.destroy
>
>     respond_to do |format|
>       format.html { redirect_to(modules_url) }
>       format.xml  { head :ok }
>     end
>   end
> end
>
> Lors de la génération manuelle du scaffold, j'ai bien utilisé un nom au
> singulier 'module'
>
> Concernant les liaisons avec les autres tables dans le fichier routes,
> j'ai :
>
>
>   map.resources :modules, :belongs_to => :autres
>
>
>   map.resources :autres, :has_many => :modules
>
>
> je ne comprends pas pourquoi j'obtiens ce message d'erreur et seulement
> sur au niveau ce contrôleur ? Surement une erreur d'inattention mais
> laquelle. y a t-il quelque d'incorrect dans tout ce code ?
Salut !

Ben to fameux 'all' pourrait bien dépendre de ta version de RoR, pour
Rails 3 et +, pas de blem cette interface est prédéfinie je crois (info
here
http://railscasts.com/episodes/202-active-record-q...),
pour rails 2.x, tu devrais créer un "named scope" (désolé, j sai po trop
traduire)comme suit:

class Module
 named_scope :all, :conditions => {}

 .
 .
 .
end

...ou bien utiliser le classique query interface "find(:all)", après
tout l'interpreteur t'a dit qu'il ne connaît pas cette methode, donc tu
la créé to named scope, éléméntaire mon cher Watson :)

plus d'info ici
http://stackoverflow.com/questions/2607697/ruby-on...

Concernant les mots clés, ben essaie de ne pas en user :-), personnalise
to code
ex: class Module => class MyProjectNameModule (préfixe tes noms de
modèle par un nom de projet e.g., après tout, c'est transparent pour les
end-users)

Les "has_many" et "belongs-to" dans les routes, ne pas surtout confondre
avec le has_many des associations au niveau des modèles, ça s'appèlle un
"nested route" qui imbrique les sub-ressources associés à une ressource
(relation d'association définie au niveau des modèles par les
macros..."has_many" et "belongs_to" !) l'URL de cette ressource, donc
c'est pas du tout là le blem, tout est clean dans cette direction

ben je crois que ça aurra aidé bon nombre, merci
This topic is locked and can not be replied to.