2009-07-29 8 views
2

J'ai un espace de noms d'administrateur qui me donne les routes habituelles telles que admin_projects et admin_project, cependant ils ne se comportent pas comme d'habitude. Ceci est mon premier projet Rails 2.3 donc peut-être lié je ne trouve pas d'informations via Google cependant.Le routage nomméspaced a-t-il changé dans Rails 2.3?

map.namespace(:admin) do |admin| 
    admin.resources :projects 
end 

La chose étrange est pour une URL donnée (. Par exemple/admin/projets/1) Je ne dois pas passer dans un objet pour obtenir les URL il les devine en quelque sorte:

<%= admin_project_path %> # => /admin/projects/1 

Pas de soucis, pas vraiment un problème que je n'ai pas remarqué auparavant.

Mais si je tente de transmettre un objet comme cela est habituel:

<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...> 

« : id » semble contenir tout l'objet, alors j'essaie passer l'identifiant directement et cela fonctionne:

<%= admin_project_path(@project.id) %> # => /admin/projects/1 

Ce ne serait pas si mauvais, mais en ce qui concerne les formes que j'utilise habituellement [: admin, @object], cependant:

<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path' 

Donc, je ne peux pas passer un ID, car il a besoin d'une classe d'objets pour trouver la bonne route à utiliser.

<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling. 

Je ne peux pas repérer les erreurs, ce qui est assez standard, donc je ne suis pas sûr de ce qui va mal ...

+0

Soit dit en passant, je peux bien sûr de contourner le problème form_for avec la version longue de la main suivante: <% form_for @project,: url => admin_project_path (@ project.id),: method =>: mettre fais | f | %> – Kris

Répondre

2

Intéressant. Que se passe-t-il lorsque vous définissez une méthode to_param sur Project? Par exemple

class Project < ActiveRecord::Base 
    def to_param 
    self.id 
    end 
end 

Cela devrait être la valeur par défaut et cela ne devrait pas être nécessaire. Mais que se passe-t-il si vous le rendez explicite? Essayez d'ajouter la méthode ci-dessus, puis revenez à votre approche originale de seulement passer autour de @project

+0

C'était le problème, j'avais 'to_param' mis à renvoyer le slug unique de projets. Cependant, la limace était toujours nulle (ma mauvaise). – Kris

0

Je voudrais pouvoir vous aider sur celui-ci. Nous avons une grande application avec plusieurs sections nommées. Nos itinéraires sont définis dans la méthode exacte que vous avez décrite et nous appelons notre assistant de chemin avec des objets. Dans l'application, nous n'accédons pas à l'aide de l'identifiant.

Notre application a démarré sur Rails 2.1 et est passée de 2.2 à 2.3 sans modification significative du routage. Désolé je ne pourrais pas être plus d'aide.

Peer

Questions connexes