2010-04-01 21 views
0

J'ai échafaudés élément choses:Qu'en est-il de la mauvaise fonction appel en vue générée via échafaudage?

script/generate scaffold wip/thing name:string 

et a obtenu un certain appel de fonction non valide dans les vues, comme:

<td><%= link_to 'Edit', edit_thing_path(thing) %></td> 

qui soulèvent cette erreur:

ActionView::TemplateError (undefined method `edit_thing_path' for #<ActionView::Base:0xb5c00944>) on line #11 of app/views/wip/things/index.html.erb:                                 
8: <tr>                                 
9:  <td><%=h thing.name %></td> 
10:  <td><%= link_to 'Show', thing %></td> 
11:  <td><%= link_to 'Edit', edit_thing_path(thing) %></td> 
12:  <td><%= link_to 'Destroy', thing, :confirm => 'Are you sure?', :method => :delete %></td> 
13: </tr> 
14: <% end %> 

Quelle est avec cette fonction ? Où est-ce? Est-ce une sorte de choses automagique ou dois-je mettre en œuvre -

J'ai ressource définie dans les routes avec espace de noms (si oui, où doit-il aller?):

map.namespace :wip do |wip| 
    wip.resources :things 
    end 

routes râteau me donne ceci:

       wip_things GET /wip/things(.:format)               {:action=>"index", :controller=>"wip/things"} 
              POST /wip/things(.:format)               {:action=>"create", :controller=>"wip/things"} 
          new_wip_thing GET /wip/things/new(.:format)              {:action=>"new", :controller=>"wip/things"} 
          edit_wip_thing GET /wip/things/:id/edit(.:format)             {:action=>"edit", :controller=>"wip/things"} 
           wip_thing GET /wip/things/:id(.:format) 

Je suppose que ces noms (wip_thing, new_wip_thing) sont les noms corrects, mais il me donne encore cette erreur

Merci.

Répondre

0

got it! La méthode doit être tel que suggéré par

rake routes 

mais devrait avoir le suffixe _path:

<%= link_to 'Edit', edit_wip_thing_path(@thing) %> 
2

Cette méthode provient de votre fichier routes.rb. Si vous avez une ressource: chose define, toutes ces méthodes sont définies dans votre controller/views.

Vérifiez votre dossier config/routes.rb si vous êtes:

map.resources :things

Si vous ne disposez pas de cette ressource, ce Methode est définit pas.

Vérifiez de cette ressource sur Ruby on Rails guides: http://guides.rubyonrails.org/routing.html

Vous pouvez connaître toutes ces routes avec la tâche rake:

rake routes

+0

Je cette ressource mais définie dans l'espace de noms: map.namespace: wip do | wip | wip.resources: choses fin est-ce quelque chose de mal avec ça? – meta

+0

Oui c'est. L'échafaudage définit l'itinéraire sans espace de noms. Vous devez définir l'URL avec cet espace de noms. Voir les routes de rake pour voir l'itinéraire réel – shingara

+0

Ok, j'ai couru des itinéraires de rake, et ai obtenu " nouveau_wip_thing GET /wip/things/new(.:format) {: action =>" nouveau ",: controller =>" wip/things "} " J'ai donc essayé d'utiliser "new_wip_thing" à mon avis, mais cela génère toujours une erreur. Des idées que fais-je tort? – meta