2010-07-11 3 views
1

J'essaye de lier à l'action addData dans le contrôleur d'entrées. Je l'ai construit le lien comme celui-ci:RoR: J'ai du mal à faire un simple lien vers une action

<%= link_to image_tag (w.link, :border =>0) ,:controller => :entries, :action => :addData %> 

mais quand je clique sur le lien, je reçois cette erreur:

Couldn't find Entry with ID=addData 

Je suis sûr que ce soit parce que j'ai une conception reposant. Y a-t-il un moyen de contourner ce problème? Merci d'avoir lu.

+0

Comme une note, vous devez fixer vos espaces 'a (b, c) 'provoquera probablement des gémissements, utilisez' ab, c' ou 'a (b, c)' au lieu des deux! –

+0

Merci pour l'aide! – ben

Répondre

1

Rails a migré entièrement à une conception RESTful. Cela signifie que pour utiliser des actions non standard, vous devez les ajouter à vos ressources au config/routes.rb.

Si elles fonctionnent sur toutes les ressources, vous les ajoutez au hachage :collection => {:addData => :post} Si vous en avez une opérant sur une seule ressource avec un ID, utilisez :member. Pour certains, c'est pour vous.

map.resources :entries, :collection => {:addData => :post} 

Pour utiliser l'ancien style de cartographie toute action à un contrôleur, vous pouvez ajouter les deux lignes suivantes à votre config/routes.rb

map.connect ':controller/:action/:id.:format' 
    map.connect ':controller/:action/:id' 
1

Avez-vous défini l'itinéraire correctement pour cette action addData? Par ailleurs, essayez ceci:

<%= link_to image_tag (w.link, :border =>0) ,{:controller => :entries, :action => :addData} %> 
+0

Ah je ne savais pas que je devais définir un itinéraire. Donc, je ne peux pas simplement lier comme ça sans définir un itinéraire? – ben

+0

Les routes ne sont essentiellement rien d'autre que des expressions régulières auxquelles la partie relative de l'URL est mappée. Le mappage commence à partir du haut du fichier de routes. Donc, s'il rencontre une expression régulière à laquelle cet url peut être mappé, il le traitera dans ce format. Ainsi, la partie map.resources devrait venir en haut et la partie map.connect (le format par défaut) devrait venir en dessous. S'il ne trouve aucune route spécifiée pour l'URL, il essaiera de le mapper au format par défaut (c'est-à-dire, la partie map.connect). J'espère que l'explication aide. –

Questions connexes