Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5875 connectés 

  FORUM HardWare.fr
  Programmation
  Ruby/Rails

  Nom de modèle irrégulier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nom de modèle irrégulier

n°1848979
LeRiton
Posté le 09-02-2009 à 15:12:42  profilanswer
 

Bonjour,
 
Je me retrouve avec un nom de modèle irrégulier, dont le pluriel est identique au singulier. Prenons par exemple "Anus", même si pénis aurait tout aussi bien fonctionné.
 
Un User à plusieurs Anus (c'est une appli assez incroyable), avec les relations qui vont bien. Entre autre, j'ai bien le belongs_to :user dans le modèle Anus.
 
Les routes me semblent correctes :
 

Code :
  1. map.resources :users do |users|
  2.  users.resources :anus
  3. end


 
J'ai aussi ajouté ce terme invariant dans la liste des inflexions (config/initializers/inflections.rb) :  
 

Code :
  1. ActiveSupport::Inflector.inflections do |inflect|
  2.  inflect.irregular 'anus' ,'anus'
  3. end


 
Dans le contrôleur User, j'ai un appel classique à @user.anus.all, qui devrait me lancer la liste des anus du @user, et qui à la place me gratifie d'un rageant "undefined method `anus' for #<User:0x48a5d28>"
 
Il y a autre chose à faire dans le cas de pluriels irréguliers ?
 

mood
Publicité
Posté le 09-02-2009 à 15:12:42  profilanswer
 

n°1849005
LeRiton
Posté le 09-02-2009 à 15:58:22  profilanswer
 

Redémarrer le serveur quand on change la config, c'est aussi une bonne idée  [:joce]  
 
Les modos peuvent locker, ça pourra toujours servir à d'autres [:dawa]

n°1849305
LeRiton
Posté le 10-02-2009 à 09:47:30  profilanswer
 

Alors en fait non, car ce modèle me pose toujours problème.

 

Nous disons donc qu'un User peut avoir plusieurs Anus. Nested ressources, si pour un User donné je fais @user.anus.build, j'associe à @user un nouvel Anus encore non sauvegardé.

 

Pour un formulaire créant un nouvel Anus pour un utilisateur, je fais donc :

 
Code :
  1. <% form_for [@user, @new_anus] do |f| %>
 

Avec @new_anus = @user.anus.build. Et là, l'url générée donne /users/id_de_l_user/anus/id_de_l_user (au lieu de /users/id_de_l_user/anus) !

 

La même méthode fonctionnant parfaitement avec d'autres modèles, je soupçonne que la route ne soit pas créée. Crainte confirmée par une simple tentative de remplacement :

 
Code :
  1. <% form_for [@user, @new_anus], :url => anus_path(@user) do |f| %>
 

Me renvoi :

 
Code :
  1. undefined local variable or method `anus_path'
 

Alors que pourtant, dans mon routes.rb, j'ai bien :

 
Code :
  1. map.resources :users do |users|
  2.  users.resources :anus
  3. end
 

[:halp]


Message édité par LeRiton le 13-02-2009 à 16:28:30
n°1850264
LeRiton
Posté le 12-02-2009 à 11:56:02  profilanswer
 

Code :
  1. <% form_for [@user, @new_anus], :url => user_path(@user) + "/anus" do |f| %><p>


 
[:cerveau vomi]
 
Vraiment, pas d'idées ?

n°1850887
igarimasho
Posté le 13-02-2009 à 15:49:31  profilanswer
 

En fait ton objectif c'est quoi? Créer / updater plusieurs modèles à la fois (avec lien de parenté) dans un seul formulaire?
 
Si c'est ça alors tu t'y prends pas de la bonne manière tout simplement parce que Rails < 2.3 ne le permet pas facilement et il faut un peu bricoler (ça reste tout de même clean). Au choix: googler "rails multiple models single form" et là t'as plein de réponses (je l'ai fais pour une de mes applis), ou bien attendre Rails 2.3 (j'y réimplémenterai ma solution).
 
Et sinon c'est tout à fait normal que anus_path n'existe pas puisqu'il n'est pas définit dans tes routes.
 
EDIT: dans tes routes j'ai pas compris le users.resources :bolus, c'est une typo?


Message édité par igarimasho le 13-02-2009 à 15:56:07
n°1850936
LeRiton
Posté le 13-02-2009 à 16:49:12  profilanswer
 

J'ai édité le post avec les routes adéquates, faute de frappe. Hormis ça, je comprend pas trop ton "pas de solution propre possible".

 

Avec des ressources nestées "classiques" (comprendre pas de pluriels tordus), j'ai pas de soucis. Si j'ai une relation 1-n entre utilisateurs et slips, ça me donne :

 
Code :
  1. map.resources :users do |user|
  2.  user.resources :slips
  3. end
 

Pour une action quelconque d'un utilisateur, si je veux y proposer la création d'un nouveau slip associé à mon utilisateur, j'ai dans le contrôleur :

 
Code :
  1. def mon_action
  2.  @user = User.mon_user
  3.  @new_slip = @user.slips.build
  4. end
 

Et dans la vue associée, je peux générer mon formulaire d'ajout d'un slip pour l'utilisateur en question avec :

 
Code :
  1. form_for [@user, @new_slip] do |f|
  2. ...
 

Et ça fonctionne parfaitement tant que j'ai pas un cas tordu comme le mien. Pour y revenir justement, le problème ne vient pas de la création du path mais plutôt d'y retrouver ses petits. Dans le cas d'anus comme invariant, anus_path peut aussi bien renvoyer à pluriel_path qu'à singulier_path (même si théoriquement, pour le dernier cas, il faut un argument, d'où mon attente sur le fait que ça fonctionne). Problème résolu par ailleurs en modifiant mes inflections, ainsi "anuses" est le pluriel d'"anus" dans mon appli.

 

Ceci dit, c'est pas vraiment d'anus dont il est question, je vous rassure...

Message cité 1 fois
Message édité par LeRiton le 13-02-2009 à 16:50:29
n°1850947
igarimasho
Posté le 13-02-2009 à 17:13:11  profilanswer
 

LeRiton a écrit :

J'ai édité le post avec les routes adéquates, faute de frappe. Hormis ça, je comprend pas trop ton "pas de solution propre possible".


En fait c'est pour updater les slips d'un utilisateur dans un unique formulaire en même temps que les attributs du user qu'il faut ma solution de bricolo, pour créer des slips, ta solution convient.
 

LeRiton a écrit :

(même si théoriquement, pour le dernier cas, il faut un argument, d'où mon attente sur le fait que ça fonctionne).


Ouaip bizarre. T'as regardé s'il existait un bug à ce propos? En tout cas c'est l'occasion d'écrire un beau test.
 

LeRiton a écrit :

Ceci dit, c'est pas vraiment d'anus dont il est question, je vous rassure...


Ha mais y'a pas de souci, chacun son truc.

Message cité 1 fois
Message édité par igarimasho le 13-02-2009 à 17:13:31
n°1850953
LeRiton
Posté le 13-02-2009 à 17:19:26  profilanswer
 

igarimasho a écrit :

Ouaip bizarre. T'as regardé s'il existait un bug à ce propos? En tout cas c'est l'occasion d'écrire un beau test.


 
Je comptais faire ça.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ruby/Rails

  Nom de modèle irrégulier

 

Sujets relatifs
Nom de variable avec concaténationRecherche de la litérature sur la conception d'un modèle de données
question basique sur le modèle objetProblème mise à jour modèle impossible Dreamweaver
[VBS] Vérification Nom pc & OSaide pour modéle de News avec PHP-Nuke
Programmer le modèle CIR Sous VBABesoin renseignement modele EAV ( Entity Attribute Value model)
hibernate grammar exception (renommé avec mon 3e post)NOM de la variable en php
Plus de sujets relatifs à : Nom de modèle irrégulier


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)