您好我正在关注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
答案 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,而是辅助方法