2010-10-31 3 views
2

Je suis avec le livre O'Reilly Rails, mais il est créé pour Rails 2, donc je pense que c'est là que se trouve l'erreur.Rails 3 erreur de routage - "No Route Matches"

Dans app/vues/entrées/sign_in.html.erb:

<html> 
<head><title>Hello <%=h @name %> </title> </head> 
<body> 
<h1> Hello <%=h @name %></h1> 

<%= form_tag :action => 'sign_in' do %> 
    <p>Enter your name: 
    <%= text_field_tag 'visitor_name', @name %> </p> 
    <%= submit_tag 'Sign in' %> 
    <% end %> 
</body> 
</html> 

Et dans app/controllers/entries_controller.rb:

class EntriesController < ApplicationController 
    def sign_in 
     @name = params[:visitor_name] 
    end 

    end 

Lorsque je clique sur le 'Connexion' bouton , il me faut à une page qui dit:

erreur de routage

Aucun résultat de l'itinéraire "/ entrées/sign_in"

Je signalerais mon dossier routes.rb, mais il semble que tout est commenté à l'exception de cette ligne:

get « entrées/sign_in »

Ce fichier semble différent de celui qu'ils sont référencement dans le livre, c'est pourquoi je crois que c'est le problème.

Merci pour votre aide!

Répondre

2

Rails 3 routeur a beaucoup changé. Voir ce billet de blog: http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

Qu'est-ce que vous voulez faire peut-être:

resources :entries do 
    collection do 
    post :sign_in 
    end 
end 

Cela ajoute une action sur toute la collection (/ entrées/sign_in) des entrées (contrairement à #member, qui serait accessible via/entries /: id/sign_in). Bien que je ne sois pas sûr de la raison pour laquelle vous souhaitez vous connecter à quelqu'un dans la ressource d'entrées. Vous pourriez créer un contrôleur séparé pour cela.

5

Si vous apprenez les Rails, il est beaucoup plus facile d'utiliser la même version de Rails que le livre pour lequel vous l'apprenez. Apprenez dans Rails 2 et passez à 3 plus tard, ou obtenez un nouveau livre.

Il y a beaucoup de différences entre les Rails 2 et 3, donc vous allez passer tout votre temps à être confondu avec des choses comme ça.