rails 路由 link_to 特定控制器操作
rails routes link_to specific controller action
对于一个简单的测验应用程序,我正在尝试连接几个静态页面,但由于我是 Rails 上 Ruby 的新手,我在如何正确定义方面遇到了问题我的路线。
我有一个带有此 link 的静态页面 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
我知道我的路线不一致,我一直在查看 rails 中有关路线的各种指南,但我还是不明白:/任何帮助将不胜感激。
"ActionController::UrlGenerationError in Pages#show" -> No route matches {:action=>"start_quiz", :controller=>"pages", :page=>"user_quiz_start"}
问题:
您的config/routes.rb
文件
中没有pages_controller
的start_quiz
操作路径
解法:
在 routes.rb
中添加此条目
get "/pages/start_quiz" => "pages#start_quiz"
现在路线将带您前往 pages_controller
中的 start_quiz
行动
对于一个简单的测验应用程序,我正在尝试连接几个静态页面,但由于我是 Rails 上 Ruby 的新手,我在如何正确定义方面遇到了问题我的路线。
我有一个带有此 link 的静态页面 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
我知道我的路线不一致,我一直在查看 rails 中有关路线的各种指南,但我还是不明白:/任何帮助将不胜感激。
"ActionController::UrlGenerationError in Pages#show" -> No route matches {:action=>"start_quiz", :controller=>"pages", :page=>"user_quiz_start"}
问题:
您的config/routes.rb
文件
pages_controller
的start_quiz
操作路径
解法:
在 routes.rb
中添加此条目get "/pages/start_quiz" => "pages#start_quiz"
现在路线将带您前往 pages_controller
start_quiz
行动