le modele genere ne porte pas le nom chosi

14 views
Skip to first unread message

ziburudebian

unread,
Jul 27, 2016, 7:00:51 AM7/27/16
to Railsfrance
bonjour

lorsque je génere rails generate indicatorf
il me genere le modele indicatorve

$ rails destroy model indicatorf
DL is deprecated, please use Fiddle
      invoke  active_record
      remove    db/migrate/20160727105244_create_indicatorves.rb
      remove    app/models/indicatorf.rb
      invoke    test_unit
      remove      test/models/indicatorf_test.rb
      remove      test/fixtures/indicatorves.yml

je pense que cela provient du modele indatorve que j'ai renommé en indicatore mais j'suis pas sur
comment faire pour que rails oubli ce renommage de fichier et me genre corrctement mon modele

merci par avance

ma config
windows 10
rails 4
ruby 2.1

Simon Courtois

unread,
Jul 27, 2016, 7:06:31 AM7/27/16
to rails...@googlegroups.com, ziburudebian
Bonjour,

Le morceau de code que tu donnes est un appel à destroy, tu as la trace d'un appel à `rails generate` ?

Bien à toi,

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

Pierre-Julien D'alberto

unread,
Jul 27, 2016, 7:07:31 AM7/27/16
to rails...@googlegroups.com
Par défault, rails te génére une migration avec le nom de ta table au pluriel (et faut que ça reste comme ça)
Par contre, ton modèle à bien le bon nom, dans ton exemple la table s'appel "indicatorves" et le modéle "indicatorf"

--

ziburudebian

unread,
Jul 27, 2016, 7:09:05 AM7/27/16
to Railsfrance
Mince je me suis trompé
voici le bon code
$ rails generate model indicatorf 
DL is deprecated, please use Fiddle
      invoke  active_record
      create    db/migrate/20160727105244_create_indicatorves.rb
      create    app/models/indicatorf.rb
      invoke    test_unit
      create      test/models/indicatorf_test.rb
      create      test/fixtures/indicatorves.yml

Florian Dutey

unread,
Jul 27, 2016, 7:11:35 AM7/27/16
to rails...@googlegroups.com
Rails pluralize et singularize en anglais.

>> "calf".pluralize
"calves"
>> "calf".pluralize.singularize
"calf"

Etant donne que les mots qui forment leur pluriel en "ves" peuvent aussi etre "ve" au singulier, il est bien possible que Rails considere "ve" comme le defaut et "f" comme l'exception (avec une liste des exceptions).
Etant donne que Indicatorf n'existe pas en anglais (ce qui peut indiquer un probleme de naming ou la mauvaise pratique de ne pas coder en anglais), il n'est pas considere comme une exception et suit le pattern suivant: 'f' => 'ves' => 've'.

Donc faut renommer ou se contenter de Indicatorve + Indicatorves

Cheers

Florian Dutey

unread,
Jul 27, 2016, 7:12:36 AM7/27/16
to rails...@googlegroups.com
Et en plus effectivement, 

>> "indicatorf".pluralize.singularize
"indicatorf"

--

Simon Courtois

unread,
Jul 27, 2016, 7:22:10 AM7/27/16
to rails...@googlegroups.com, Florian Dutey
Effectivement tout semble ok. À noter pour les conventions:

* modèles au singulier (ex: Person)
* tables au pluriel (ex: People)
* controllers en général au pluriel (ex: PeopleController)

Rails se charge effectivement de ce travail.


Bien à toi,

Simon Courtois

ziburudebian

unread,
Jul 27, 2016, 7:29:08 AM7/27/16
to Railsfrance
ceci est embetant
je pense avoir de bonne pratique de codage en anglais car justement j'utilise le mot anglais indicator et non le mot français indicateur
pourquoi f car en fait je cree dix tables de a à j (indicatora,..., indicatorj), tous c'est bien passé sauf pour le f (indicatorf)
je ne comprends pas bien vos reponses sur le passage du singulier au pluriel


Le mercredi 27 juillet 2016 13:00:51 UTC+2, ziburudebian a écrit :

Simon Courtois

unread,
Jul 27, 2016, 7:35:03 AM7/27/16
to rails...@googlegroups.com, ziburudebian
Comme indiqué par le lien sur les guides, Rails a un certain nombre de conventions.
Une en particulier est que les classes représentant un modèle ont un nom singulier et que les tables en base de données ont un nom au pluriel.

Dans le cas de indicatorf Rails le voit comme un nom terminant en `f` et applique donc la règle d'anglais qui indique qu'un mot se terminant en `f` a un pluriel en `ves`.

Un conseil cependant, si tu souhaites appliquer un anglais correct et résoudre ton problème en même temps, il y a un moyen simple.

On ne dit pas "The indicator F" mais "The F indicator" il serait donc logique que tes modèles se nomment aindicator, bindicator, …, findicator, j_indicator.

Tes modèles seraient de la forme `Findicator` et tes tables de la forme `findicators`.

Problem solved.

Bien à toi,

Simon Courtois

--

Loïc Minaudier

unread,
Jul 27, 2016, 7:50:54 AM7/27/16
to rails...@googlegroups.com, ziburudebian
Tu peux spécifier les règles de pluralisation dans config/initializers/inflections.rb si tu ne veux pas changer ton code.
Il y a des exemples dans le fichier par défaut.

ziburudebian

unread,
Jul 27, 2016, 7:53:50 AM7/27/16
to Railsfrance
ok merci  c'est clair


Le mercredi 27 juillet 2016 13:00:51 UTC+2, ziburudebian a écrit :

Florian Dutey

unread,
Jul 27, 2016, 10:07:47 PM7/27/16
to rails...@googlegroups.com
Pourquoi creer 10 tables au lieu plutot qu'une seule + STI?

--

Sylvain Abélard

unread,
Aug 2, 2016, 9:51:41 AM8/2/16
to Railsfrance
Hi railers,
je suis surpris qu'on propose STI plutôt que MongoDB mais tant mieux, ça me hérisse moins :)

Cela dit, je pense d'expérience que :
- si les indicateurs sont essentiellement les mêmes, il y a juste un statut "indicator letter/class/category" à mettre et tout garder en une table
- s'ils sont très différents, ils gagneraient à avoir des tables différentes mais nommées pour que ce soit évident (indicator A = pays, B = age, C = profession...)

Enfin, si tu es débutant ziburudebian (y'a pas de mal à ça, bravo et bon courage), mais regarde les has_many : through et autres tables de jointure.
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

Ça te permettrait d'avoir une table Indicator, mais sur ton objet d'avoir 6 champs nommés "[abcdef]_indicator",
ou d'avoir un seul champ nommé "indicators_letters" qui est une liste associant ton objet à un indicateur, et contenant un champ "letter" donnant la lettre.


++ <3

Florian Dutey

unread,
Aug 3, 2016, 3:07:54 AM8/3/16
to rails...@googlegroups.com
J'ai propose STI parce que j'ai pas d'indications sur la structure, mais 10 tables avec le meme nom + un discriminant, j'ai interprete ca comme 10x le meme objet avec un discriminant. Ce qui correspond tres grossierement a du STI.

J'adore les solutions ou on separe le contexte du l'objet dans des associations ou dans le "association owner". Gros fan de la solution que tu proposes donc. 

My blind 2 cents :D
Reply all
Reply to author
Forward
0 new messages