我一直在关注一些铁路指南,我现在尝试为我正在做的项目实施一些事情并在第一道障碍遇到障碍
尝试加载页面时出现此错误
StepOne#login中的ActionController :: UrlGenerationError 显示/Users/rogan/Sites/authImp/app/views/step_one/login.html.erb第3行提出:
没有路线匹配{:action =>“show”,:controller =>“step_one”}缺少必需的键:[:id] 提取的来源(第3行):
<%= form_for url: step_one_path do %>
form stuff...
然后是我的step_one_controller.rb
class StepOneController < ApplicationController
def new
end
def create
user = User.authenticate(params[:email], params[:password])
if user
pincode = generatePin
puts "one use pin.#{pincode}"
redirect_to "step_two"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
end
这是来自我在使用SessionsController.rb和form_for url的指南中看到的登录系统的适配器:sessions_path
但我的简单修改似乎打破了它,我也查看了我的路线,它们似乎都按顺序排列
编辑:继承人是我的路线 编辑编辑:将所有内容更改为step_one并按照建议删除's',我现在得到
NoMethodError in StepOne#login
undefined method `model_name' for Hash:Class
<%= form_for url: step_one_path do %>
所以从一个问题到另一个问题!
AuthImp::Application.routes.draw do
resources :users
resources :sessions
resource :step_one
get "users/:id" => "users#show"
get "sign_up" => "users#new"
get "log_in" => "step_one#login"
get "step_two" => "sessions#new"
get "log_out" => "sessions#destroy", :as => "log_out"
然后我的佣金路线如下
root to: "welcome#index"
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
sessions GET /sessions(.:format) sessions#index
POST /sessions(.:format) sessions#create
new_session GET /sessions/new(.:format) sessions#new
edit_session GET /sessions/:id/edit(.:format) sessions#edit
session GET /sessions/:id(.:format) sessions#show
PATCH /sessions/:id(.:format) sessions#update
PUT /sessions/:id(.:format) sessions#update
DELETE /sessions/:id(.:format) sessions#destroy
step_one POST /step_one(.:format) step_ones#create
new_step_one GET /step_one/new(.:format) step_ones#new
edit_step_one GET /step_one/edit(.:format) step_ones#edit
GET /step_one(.:format) step_ones#show
PATCH /step_one(.:format) step_ones#update
PUT /step_one(.:format) step_ones#update
DELETE /step_one(.:format) step_ones#destroy
GET /users/:id(.:format) users#show
sign_up GET /sign_up(.:format) users#new
log_in GET /log_in(.:format) step_one#login
step_two GET /step_two(.:format) sessions#new
log_out GET /log_out(.:format) sessions#destroy
root GET / welcome#index
答案 0 :(得分:1)
您的问题出在我认为的命名中,resources :step_one
假定您定义StepOnesController
(复数),而不是StepOneController
因此,您应该重命名控制器或使用resource :step_one
路线(最后没有s
)
答案 1 :(得分:0)
看起来Rails希望你将id传递给你的step_one_path,所以form_for应该是这样的:
<%= form_for url: step_one_path(@user.id) do %>
其中@ user.id将是与表单关联的用户的ID。希望有所帮助。如果没有,请包含您的routes.rb文件。
答案 2 :(得分:0)
<%= form_tag step_one_path do |f| %>
是必要的表格标签,我错了
感谢所有帮助