2017-04-25 58 views
0

对于一个简单的测验应用程序,我试图连接几个静态页面,但由于我是Ruby on Rails的新手,我在如何正确定义我的路线时遇到了问题。rails routes link_to特定的控制器动作

我有一个静态页面页/ user_quiz_start这个链接是应该向用户发送到页/ 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 

我知道我的路线是不一致的,我一直在寻找有关轨道的各种指南,但我只是不明白:/任何帮助,将不胜感激。

回答

0

“的ActionController :: UrlGenerationError在页面#秀” - >没有路由匹配{:动作=> “start_quiz”:控制器=> “页”,页面=> “user_quiz_start”}

问题:

你不必在你的config/routes.rb文件的pages_controllerstart_quiz行动路线

解决方案:

添加此项在routes.rb中

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

而现在的路线将带你到start_quiz行动pages_controller

+0

谢谢!这就说得通了 :) – megahra

相关问题