Рельсы маршруты link_to конкретное действие контроллера

Для простого приложения викторины я пытаюсь подключить пару статических страниц, но, поскольку я новичок в Ruby on Rails, у меня возникают проблемы с тем, как правильно определить мои маршруты.

У меня есть статическая страница pages/user_quiz_start с этой ссылкой, которая должна отправить пользователя на pages/user_quiz_question.html и инициализировать переменную current_question_index:

#views/pages/user_quiz_start.html.rb:
<%= link_to 'Start Quiz!', :controller => :pages, :action => :start_quiz %>

Но я получаю "ActionController::UrlGenerationError in Pages#show" -> No route matches {:action=>"start_quiz", :controller=>"pages", :page=>"user_quiz_start"}

Вот мой контроллер и мои маршруты:

#pages_controller.rb:
def show
    if valid_page?
      render template: "pages/#{params[:page]}"
    else
      render file: "public/404.html", status: :not_found
    end
  end

  def start_quiz
    if @quiz_session.start!
      redirect_to user_quiz_question_path, notice: 'Quiz has been started'
    else
      redirect_to :back, error: 'Quiz cannot be started'
    end
  end

#in the model quiz_session.rb:
def start!
    self.current_question_index = 0
end

#routes.rb:
Rails.application.routes.draw do
  ...
  get 'home/index'
  get '/user_quiz_start', :to => redirect('pages/user_quiz_start.html')
  get '/user_quiz_question' => redirect('pages/user_quiz_question.html')

  # Setup static pages
  get "/pages/:page" => "pages#show"

  devise_scope :user do
    root to: redirect('/pages/user_home')
    match '/sessions/user', to: 'devise/sessions#create', via: :post
  end

  root 'pages#home'
end

Я знаю, что мои маршруты противоречивы, и я искал различные руководства, касающиеся маршрутов в рельсах, но я просто пока не понимаю:/ Буду признателен за любую помощь.

1 ответ

Решение

"ActionController::UrlGenerationError in Pages#show" -> Нет подходящих маршрутов {:action=>"start_quiz",:controller=>"pages",:page=>"user_quiz_start"}

Проблема:

У вас нет маршрута для start_quiz действие pages_controller в вашем config/routes.rb файл

Решение:

Добавьте эту запись в ways.rb

get "/pages/start_quiz" => "pages#start_quiz"

И теперь маршрут приведет вас к start_quiz действие в pages_controller

Другие вопросы по тегам