NoMethodError是Rails的新功能

时间:2013-11-28 00:45:58

标签: ruby-on-rails ruby

我一直在关注一些铁路指南,我现在尝试为我正在做的项目实施一些事情并在第一道障碍遇到障碍

尝试加载页面时出现此错误

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

3 个答案:

答案 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| %>

是必要的表格标签,我错了

感谢所有帮助