没有路由匹配get signup_path

时间:2014-08-03 03:36:39

标签: ruby-on-rails railstutorial.org

您好我正在关注Michael Hartl的教程,目前正在第7章。我刚刚添加了一个注册页面,但我收到了错误消息:

编辑:添加了更多错误消息 没有路由匹配[GET]" / signup_path" Rails.root:C:/ Sites / sample_app

这是我的路线文件

SampleApp::Application.routes.draw do 
  resources :users
  root  'static_pages#home'
  match '/signup',  to: 'users#new',             via: 'get'
  match '/help',    to: 'static_pages#help',    via: 'get'
  match '/about',   to: 'static_pages#about',   via: 'get'
  match '/contact', to: 'static_pages#contact', via: 'get'

查看主页

的文件
<div class="center hero-unit">
  <h1>Welcome to the Sample App</h1>

  <h2>
    This is the home page for the
    <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
    sample application.
  </h2>

  <%= link_to "Sign up now!", 'signup_path', class: "btn btn-large btn-primary" %>
</div>

<%= link_to image_tag("rails.png", alt: "Rails"), 'http://rubyonrails.org/' %>

路由

users_path  GET /users(.:format)    users#index
POST    /users(.:format)    users#create
new_user_path   GET /users/new(.:format)    users#new
edit_user_path  GET /users/:id/edit(.:format)   users#edit
user_path   GET /users/:id(.:format)    users#show
PATCH   /users/:id(.:format)    users#update
PUT /users/:id(.:format)    users#update
DELETE  /users/:id(.:format)    users#destroy
root_path   GET /   static_pages#home
signup_path GET /signup(.:format)   users#new
help_path   GET /help(.:format) static_pages#help
about_path  GET /about(.:format)    static_pages#about
contact_path    GET /contact(.:format)  static_pages#contact

4 个答案:

答案 0 :(得分:4)

路线助手

问题是您将'signup_path'引用为字符串:

<%= link_to "Signup", 'signup_path' %>

这里的问题是,当您引用route / path helper时,您正在调用方法。 Rails中的每个帮助器都是方法 - 这意味着如果您引用字符串,系统将无法调用您需要的方法。

要解决此问题,您应read up about using route / path helpers in Rails - 并使用路线中的辅助方法:

<%= link_to "Signup", signup_path %>

-

<强>路线

给你一点奖励:

#config/routes.rb
resources :users, path_names: { new: "signup" }
resources :static_pages, only: [] do
   collection do
      get :help
      get :about
      get :contact
   end
end

您希望在路由中使用users资源作为{{1}}资源。这将使您的路线更清洁(干)

答案 1 :(得分:1)

您必须使用&#39;作为&#39;提供自定义路线的名称。

match '/signup',  to: 'users#new', via: 'get', :as => 'signup'

您可以通过执行

验证是否正确设置了指定的路由
rake routes | grep signup

在你的控制台中。你应该看到像

这样的东西
signup GET  /signup(.:format)          users#new

在您的视图中,您可以像

一样使用它
<%= link_to "Signup", signup_path%>

答案 2 :(得分:0)

如果您正在使用设计,请尝试在路线中关注,根据需要进行自定义

devise_for :users, path: "auth", path_names: { sign_in: 'login', sign_out: 'logout', password: 'secret', confirmation: 'verification', unlock: 'unblock', registration: 'register', sign_up: 'cmon_let_me_in' }

答案 3 :(得分:0)

我认为您需要删除

获得&#39;用户/新&#34;在routes.rb文件中的行,如教程中所述。

该行创建一个new_users_path助手

在列出7.3之后,您将看到以下内容:

 Listing 7.3: Adding a Users resource to the routes file.
config/routes.rb
 SampleApp::Application.routes.draw do
  resources :users
  root  'static_pages#home'
  match '/signup',  to: 'users#new',            via: 'get'
  .
  .
  .
end
You might have noticed that Listing 7.3 removes the line

get "users/new"

这是链接 http://www.railstutorial.org/book/sign_up#cha-sign_up

<强>更新

从下面的评论中,我认为您试图通过浏览器/ signup_path访问

您在routes.rb文件中的条目

  match '/signup',  to: 'users#new',             via: 'get'

创建一个url,例如localhost:3000 / signup

创建网址localhost:3000 / signup_path

在教程中,您将看到对signup_path的引用 这是一个帮助&#34; rails创建的方法,可用作rails内部url的快捷方式。在本教程中,您将看到使用此功能的测试,例如

require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "signup page" do
    before { visit signup_path }

    it { should have_content('Sign up') }
    it { should have_title(full_title('Sign up')) }
  end
end

在这种情况下,signup_path不是url,而是辅助方法