2010-11-30 23 views
6

J'ai un contrôleur "Apps". Il consiste en une action "index". Maintenant, je veux ajouter une nouvelle action appelée "acheter":La création d'une nouvelle action de rails ne fonctionne pas?

def buy 
    respond_to do |format| 
    format.html 
    end 
end 

i ajouté un buy.html.erb aux vues, mais lorsque vous accédez à/apps/acheter, je reçois le message suivant:

Unknown action - The action 'show' could not be found for AppsController 

dans les routes et j'ajouté ceci:

match '/apps/buy', :controller => 'apps', :action => 'buy' 

merci à l'avance!

Répondre

16

L'URL est prise par la route standard /apps/:id, je suppose que vous avez également resources :apps dans vos itinéraires?

Placez simplement la route acheter d'abord:

match '/apps/buy', :controller => 'apps', :action => 'buy' 
resources :apps 

Gardez à l'esprit que les routes sont exécutées dans l'ordre dans lequel elles sont définies, de sorte que ceux spécifiques doivent précéder le général.

Une approche plus simple que @Ryan suggère est l'ajout d'une route de collecte à la ressource:

resources :apps, :collection => { :buy => :get } 
+4

ajouter Sinon l'action 'buy' comme itinéraire de collecte à vos' ressources: apps'. –

+0

@Ryan bon point, ce serait préférable. –

+0

merci beaucoup! – Tronic