2010-02-22 7 views
1

Je vais me diriger vers la source pour voir si je peux trouver ce qui cause cela, mais quelqu'un ici a probablement déjà rencontré ça ... Je fais un form_for normal:Rails form_for place la référence/l'adresse de l'objet dans l'URL au lieu de l'identifiant

<% form_for(@myobj) do |f| %> 

Mais l'URL il est générateur est:

form action="/myobjs/%23%3CMyobj:0x105f03ec0%3E" class="edit_myobj" id="edit_myobj_13" method="post"> 

Quand il doit bien entendu être générer l'action "/ myobjs/13" si l'identifiant == 13 . J'ai vérifié que l'objet renvoie son identifiant correctement, et bien sûr form_for est en train de définir l'identifiant du formulaire de manière appropriée en utilisant l'identifiant (comme indiqué ci-dessus), donc ... Je ne suis pas encore sûr quelle forme utiliser pour générer l'action URL pour le formulaire. Y a-t-il des gens qui ont déjà trouvé une solution?

Merci à l'avance ...

Répondre

0

Avez-vous votre configuration des itinéraires pour le modèle?

+0

Oui, désolé, j'aurais dû inclure cela à l'origine. Routage RESTful standard: map.resources: myobjs – Masonoise

0

Cela ne s'est produit que lorsque j'ai essayé de créer un formulaire pour un nouvel objet, par exemple <% form_for(Widget.new) do |f| %>. Essayez de remplacer le to_param method dans votre modèle pour voir si vous pouvez savoir ce qui se passe.

def to_param 
    (id = self.id) ? id.to_s : 'NO ID FOUND! Dig for bugs!' 
end 

Puisque vous ne héritez pas de ActiveRecord :: Base, vous allez devoir mettre en œuvre to_param vous. Le code source pour to_param d'ActiveRecord est le suivant:

def to_param 
    # We can't use alias_method here, because method 'id' optimizes itself on the fly. 
    (id = self.id) ? id.to_s : nil # Be sure to stringify the id for routes 
end 

Et devrait fonctionner dans votre situation.

+0

Merci pour cette pensée, je n'y étais pas encore arrivé. Mystérieusement, si j'ai le to_param() comme montré ici, l'action est générée correctement avec action = "/ myobjs/13". Si je commente la méthode to_param(), elle est à nouveau générée de manière incorrecte. Bizarre, je n'ai jamais eu ça avant. Je vais devoir rechercher à quoi ressemble to_param() dans mes autres modèles et superclasses - ce n'est pas un modèle ActiveRecord, donc son super est simplement Object ... – Masonoise

+0

ActiveRecord :: Base est où to_param est défini, donc Object ne générera pas la méthode. Pour corriger l'erreur, vous devrez hériter de ActiveRecord :: Base ou ajouter le fichier to_param manuellement. Il suffit de remplacer «NO ID FOUND ...» par «zéro». –