Question

J'ai un espace de noms d'administrateur qui me donne les routes habituelles telles que admin_projects et admin_project, mais ils ne se comportent pas de la manière habituelle. Ceci est mon premier projet Rails 2.3, alors peut-être que je ne trouve aucune information via Google.

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

Ce qui est étrange, c’est pour une URL donnée (par exemple. / admin / projects / 1). Je n’ai pas besoin de passer un objet pour obtenir une URL, il la devine en quelque sorte:

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

Pas de soucis, pas vraiment un problème, mais pas remarqué avant.

Mais si j'essaie de passer un objet comme d'habitude:

<%= 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 l'objet entier, alors j'essaie de passer l'id directement et cela fonctionne:

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

Cela ne serait pas si grave, mais quand il s'agit de formulaires, j'utilise habituellement [: admin, @object], cependant:

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

Je ne peux donc pas transmettre d'identifiant, car il a besoin d'une classe d'objets pour déterminer la 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 détecte aucune erreur et c'est assez standard alors je ne suis pas sûr de ce qui ne va pas ...

Était-ce utile?

La solution

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 qu'advient-il si vous le rendre explicite? Essayez d’ajouter la méthode ci-dessus, puis revenez à votre approche originale consistant à ne faire circuler que @project

Autres conseils

Je voudrais pouvoir vous aider sur celui-ci. Nous avons une grande application avec plusieurs sections de noms-espacé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. Nous n’avons pas accès à l’application avec l’identifiant dans l’application.

Notre application a démarré sous 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 utile.

Peer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top