1

Ich arbeite an Michael Hartl Tutorial auf Railstutorial.org. Ich habe Schwierigkeiten in Kapitel 5 mit dem Routing zu arbeiten. Wenn ich mit einem Routen-DateiSchienen Routing Syntax Fehler

routes.rb 

Rails.application.routes.draw do 
    root 'static_pages#home' 
    get 'static_pages/help' 
    get 'static_pages/about' 
    get 'static_pages/contact' 

für jede dieser gibt es einen Test wie

static_pages_controller_test.rb 

test "should get home" do 
    get :home 
    assert_response :success 
    assert_select "title", "Ruby on Rails Tutorial Sample App" 
end 

diese Syntax funktioniert und alle Tests bestanden beginnen, aber später will er die Syntax ändern mit Hilfe der * _Pfadkonvention.

so jetzt die Tests aussehen

class StaticPagesControllerTest < ActionController::TestCase 
    test "should get home" do 
    get root_path 
    . 
    . 
    end 

test "should get help" do 
    get help_path 
    . 
    . 
    end 

und ich die Routen zu

root 'static_pages#home' 
get '/help', to: 'static_pages#help' 
get '/about', to: 'static_pages#about' 
get '/contact', to: 'static_pages#contact' 

aktualisiert, aber jetzt alle die Tests fehlschlagen mit den Nachrichten

ERROR["test_should_get_home", StaticPagesControllerTest, 2016-06-30  05:02:41 -0700] 
test_should_get_home#StaticPagesControllerTest (1467288161.43s) 
ActionController::UrlGenerationError:   ActionController::UrlGenerationError: 
No route matches {:action=>"/", :controller=>"static_pages"} 

ERROR["test_should_get_help", StaticPagesControllerTest, 2016-06-30 05:02:41 -0700] 
test_should_get_help#StaticPagesControllerTest (1467288161.43s) 
ActionController::UrlGenerationError:   ActionController::UrlGenerationError: 
No route matches {:action=>"/help", :controller=>"static_pages"} 

mein Controller etwas aussieht wie diese

class StaticPagesController < ApplicationController 
    def home 
    end 

    def help 
    end 
    . 
    . 
end 

wenn ich Rake Routen laufen bekomme ich

Prefix Verb URI Pattern  Controller#Action 
    root GET/    static_pages#home 
    help GET /help(.:format) static_pages#help 
    about GET /about(.:format) static_pages#about 
contact GET /contact(.:format) static_pages#contact 

, was mache ich falsch?

+0

ich beginne zu fragen, ob die Version von Schienen etwas damit zu tun hat, sehen. Ist das möglich? 4 gegen 5? – mkrinblk

+0

Ich neige mehr dazu. Ich bin mir nicht sicher, wann er das Tutorial aktualisiert hat, aber jetzt in seinen Edelstein-Dateien für den 4.-ed hat er Schienen 5.0.0 aufgelistet, aber als ich vor ein paar Wochen mit dem Tutorial angefangen habe, denke ich, dass ich den 3.-ed auf github benutze Listen Rails 4.2.2 und in dieser Ausgabe hat er die Routen anders geschrieben.Gab es einen Wechsel zwischen den beiden Versionen, die sich auf die Syntax * _path beziehen? – mkrinblk

+1

Ja Autor hat letzte Woche Rails-Tutorials mit 5.0.0 aktualisiert. Es wird vorgeschlagen, dass Sie es auch aktualisieren, was die weitere Reise angenehmer und fehlerfrei machen wird, zusätzlich erhalten Sie weitere neue Dinge, die Sie in 5.0.0 lernen können. –

Antwort

0

Ja Autor aktualisieren Schienen hat Tutorials mit 5.0.0 letzter Woche. Es wird vorgeschlagen, dass Sie es aktualisieren, die weitere Reise angenehmer und Fehler zusätzlich zu den frei machen wird, werden Sie mehr neue Dinge in 5.0.0

Update Ihre Tests/controllers/static_pages_controller_test.rb

lernen
require 'test_helper' 

class StaticPagesControllerTest < ActionDispatch::IntegrationTest 

    test "should get home" do 
    get root_path 
    assert_response :success 
    assert_select "title", "Ruby on Rails Tutorial Sample App" 
    end 

    test "should get help" do 
    get help_path 
    assert_response :success 
    assert_select "title", "Help | Ruby on Rails Tutorial Sample App" 
    end 

    test "should get about" do 
    get about_path 
    assert_response :success 
    assert_select "title", "About | Ruby on Rails Tutorial Sample App" 
    end 

    test "should get contact" do 
    get contact_path 
    assert_response :success 
    assert_select "title", "Contact | Ruby on Rails Tutorial Sample App" 
    end 
end 

ich bin sicher, sobald Sie Ihre Tests/controllers/static_pages_controller_test.rb aktualisieren Sie grün Test $ rails test

1

Sie müssen diese Routen neu schreiben, damit Sie dynamische Route Helfer für Sie nach Ihrem Test erstellen können. Schreiben Sie es wie,

get 'static_pages/help' , as: :help 
get 'static_pages/about' , as: :about 
get 'static_pages/contact' , as: :contact 

Lesen 3.6 Naming Routes.

Wie pro Ihre aktuelle Route, werden diese *_path wie static_pages_about sein, static_pages_help usw. Ich bin nicht sicher, wie Sie die rake routes Ausgabe erhalten haben, wie Sie ohne as Option gezeigt haben.

+0

das funktioniert nicht, es gibt immer noch einen Fehler: Keine Route stimmt überein {: action => "/ static_pages/help",: controller => "static_pages"} und dies spricht nicht an, warum die root-Route ähnlich gibt: Keine Route stimmt überein {: action => "/",: controller => "static_pages"} – mkrinblk

+0

@mkrinblk Was ist Ihre Rails-Version? –

-1

Ich bin nicht so sicher, aber was passiert, wenn Sie dies tun:

root 'static_pages#home' 
get 'help', to: 'static_pages#help' 
get 'about', to: 'static_pages#about' 
get 'contact', to: 'static_pages#contact' 
+0

gleiche Sache Keine Route stimmt überein {: action => "/ help",: controller => "static_pages"} – mkrinblk