1

Я работаю над учебником Майкла Хартла на railstutorial.org. У меня есть трудности В главе 5 с получением маршрута для работы. Если я начинаю с пути файлаошибки синтаксиса маршрутизации рельсов

routes.rb 

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

для каждого из них есть тест, как

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 

этот синтаксис работает и все тесты проходят, но потом он хочет изменить синтаксис с помощью * _path.

так что теперь тесты выглядят как

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

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

и я обновил маршруты для

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

но теперь все тесты не с сообщениями

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"} 

мой контроллер выглядит например

class StaticPagesController < ApplicationController 
    def home 
    end 

    def help 
    end 
    . 
    . 
end 

если я бег рек маршрутов я получаю

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 

, что я делаю неправильно?

+0

Я начинаю задаваться вопросом, если версия рельсов имеет что-то делать с этим. Это возможно? 4 против 5? – mkrinblk

+0

Я больше склоняюсь к этому. Я не уверен, когда он обновил учебник, но теперь в его файлах драгоценных камней для 4-го издания у него есть рельсы 5.0.0, но когда я начал учебное пособие пару недель назад, я думаю, что использовал 3-е издание, которое на github списки Rails 4.2.2, и в этом издании он написал маршруты по-разному.было ли изменение между двумя версиями, относящимися к синтаксису * _path? – mkrinblk

+1

Да. На прошлой неделе автор обновил руководства по рельсам с 5.0.0. Предлагается также обновить его, что сделает дальнейшее путешествие более приятным и без ошибок в дополнение к этому, вы получите больше новых вещей, чтобы учиться в 5.0.0 –

ответ

0

Да Автор обновил рельсы учебников с 5.0.0 на прошлой неделе. Предлагается обновить его тоже что сделает дальнейшее путешествие более приятным и безошибочной в дополнение к этому, вы получите больше новых вещей, чтобы узнать в 5.0.0

обновляли тесты/Контроллеры/static_pages_controller_test.rb

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 

Я уверен, что, как только вы обновите тесты/контроллеры/static_pages_controller_test.rb вы увидите зеленый тест $ rails test

1

Вам необходимо переписать эти маршруты, чтобы они могли создавать динамические помощники маршрутов для вас в соответствии с вашим тестом. Напишите его как,

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

Прочитано 3.6 Naming Routes.

Согласно вашему текущему маршруту, тем *_path будет как static_pages_about, static_pages_help и т.д. Я не знаю, как вы получите rake routes выход, как вы показали без использования as опции.

+0

Это не работает, это все еще дает мне ошибку: нет маршрутов, сопоставляемых {: action => "/ static_pages/help",: controller => "static_pages"}, и это не относится к тому, почему корневой маршрут аналогичным образом дает: Нет сопоставлений маршрутов {: action => "/",: controller => "static_pages"} – mkrinblk

+0

@mkrinblk, какова ваша версия Rails? –

-1

Я не уверен, но что произойдет, если вы сделаете это:

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

То же самое Нет совпадений маршрутов {: action => "/ help",: controller => "static_pages"} – mkrinblk

Смежные вопросы