2010-05-30 3 views
0

Ok, j'ai des événements que je veux publier/dépublier avec une action supplémentaire (nonRESTful) J'ai regardé le railcast de Ryan Bates sur ceci: http://railscasts.com/episodes/35-custom-rest-actions et il m'a obtenu la plupart du temps. Je pense que le problème est que ma route est niché dans une section /admin si bien que quand je lance rake routes et obtenez:Rails ne trouve pas mon itinéraire mais il existe!

publish_admin_event PUT /admin/events/:id/publish(.:format) {:controller=>"event_services", :action=>"publish"} 

Cela ne fonctionnera pas dans mon dossier de /views/admin/index.html.erb:

<%= link_to 'Publish', publish_admin_event(event), :method => :put %> 

car il prétend que le chemin n'existe pas! Et ni volonté ceci:

<%= link_to 'Publish', {:controller => :event_services, :action => :publish}, {:method => :put, :id => event} %> 

et dit que "No route matches {:controller=>"event_services", :action=>"publish"}"

donc ce qui donne? (Et je l'ai essayé de redémarrer mon serveur pour c'est pas.)

EDIT: Cela marche:

<%= link_to 'Publish', "/admin/events/" + event.id.to_s + "/publish", :method => :put %> 

Mais je préfère ne pas faire ça.

EDIT # 2: Mon entrée d'itinéraire:

map.resource :admin do |admin| 
    admin.admin '', :controller => :admin, :only => :index 
    admin.resources :events, :controller => :event_services, :member => {:publish => :put } do |service_event| 
    # ... 
    end 
end 
+0

Pouvez-vous poster votre entrée d'itinéraire? –

+0

@Andy Gaskell: posté mais j'accepterai probablement la réponse de sepp2k. Si vous avez quelque chose d'utile à ajouter en guise de réponse, je vous mettrai en colère. – DJTripleThreat

Répondre

3

Cela ne fonctionnera pas dans mon dossier de /views/admin/index.html.erb:

<%= link_to 'Publish', publish_admin_event(event), :method => :put %> 

parce qu'il prétend que le chemin n'existe pas!

Je préfère attendre que cela ne fonctionne pas à cause d'une erreur NoMethodError. Je pense que vous vouliez écrire publish_admin_event_path au lieu de seulement publish_admin_event là. Alors ça devrait marcher.

Et ne sera ceci:

<%= link_to 'Publish', {:controller => :event_services, :action => :publish}, {:method => :put, :id => event} %> 

Cela fonctionnera si vous :controller => "/admin/event_services" (bien que ce n'est pas nécessaire si vous êtes déjà dans l'espace de noms admin) et, comme vous avez compris Dans votre commentaire, déplacez :id => event dans le premier hachage.

+0

Cette première partie a fonctionné! Je ne sais pas ce que j'ai oublié la partie '_path'! La deuxième partie ne fonctionne pas. Voir ma deuxième édition. – DJTripleThreat

+0

ok la seconde fonctionne si je pars: controller =>: event_services et mettre mon: id => événement dans le premier hachage. – DJTripleThreat

+0

@DJTripleThreat: Oups, je n'ai pas vu ça. Oui, event_services fonctionnera si vous êtes déjà dans l'espace de noms d'administration. 'admin/event_services' fonctionnera lorsque vous êtes dans l'espace de noms de niveau supérieur. Et '/ admin/event_services' fonctionnera peu importe où vous êtes. – sepp2k

Questions connexes