Ruby on rails 在RubyonRails中构建用户身份验证,得到了未定义的方法“dashboard\uUsers\uIndex\uPath';

Ruby on rails 在RubyonRails中构建用户身份验证,得到了未定义的方法“dashboard\uUsers\uIndex\uPath';,ruby-on-rails,ruby,Ruby On Rails,Ruby,我观看了railscast以构建您自己的用户身份验证。我得到了这个未定义的方法错误。应该在哪里定义此方法,控制器、模型还是两者都不定义 Showing /opt/csdashboard/app/views/dashboard_users/new.html.erb where line #3 raised: undefined method `dashboard_users_index_path' for #<#<Class:0x007f8480988fa8>:0x007f84

我观看了railscast以构建您自己的用户身份验证。我得到了这个未定义的方法错误。应该在哪里定义此方法,控制器、模型还是两者都不定义

Showing /opt/csdashboard/app/views/dashboard_users/new.html.erb where line #3 raised:

undefined method `dashboard_users_index_path' for #<#<Class:0x007f8480988fa8>:0x007f84809880f8>
Extracted source (around line #3):

1: <h1>Sing Up</h1>
2: 
3: <%= form_for @dashboard_user do |f|%>
4:     <% if @dashboard_user.errors.any? %>
5:      <div class="alert-error">
6:        <h2>Form is invalid</h2>
模型如下:

class DashboardUsers < ActiveRecord::Base
  attr_accessible :email, :password, :password_hash, :password_salt
  attr_accessor :password
  before_save :encrypt_password

  validates_confirmation_of :password
  validates_presence_of :password, :on => :create
  validates_presence_of :email
  validates_uniqueness_of :email

  def self.authenticate(email, password)
    dashboard_user = find_by_email(email)
    if dashboard_user && dashboard_user.password_hash == BCrypt::Engine.hash_secret(password, dashboard_user.password_salt)
      dashboard_user
    else
      nil?
    end
  end

  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash =BCrypt::Engine.hash_secret(password, password_salt)
    end
  end

end

您需要在
routes.rb
中定义名为
dashboard\u users\u index
和方法为
post
的路由


您能给我们看一下您的
routes.rb
文件吗?

Do
rake routes
并检查带有前缀
dashboard\u users\u index
的路由。如果它丢失了,那么您需要创建它并将其映射到控制器中的操作。您有什么Ruby on Rails版本?Rails 4.0.2,Ruby 2.0.0p247。在原始帖子中添加了路由。添加了
post'/dashboard\u users\u index'=>“dashboard\u users\35; new”
现在工作得更好了。我确实使用了post和get,同样的结果。在这个例子中,我需要使用post for vs get做什么?谢谢你的帮助。没关系,post在添加用户时起作用。通常,表单使用post或PUT/PATCH方法,因为它从url隐藏请求参数,对请求的长度没有限制,等等。
class DashboardUsers < ActiveRecord::Base
  attr_accessible :email, :password, :password_hash, :password_salt
  attr_accessor :password
  before_save :encrypt_password

  validates_confirmation_of :password
  validates_presence_of :password, :on => :create
  validates_presence_of :email
  validates_uniqueness_of :email

  def self.authenticate(email, password)
    dashboard_user = find_by_email(email)
    if dashboard_user && dashboard_user.password_hash == BCrypt::Engine.hash_secret(password, dashboard_user.password_salt)
      dashboard_user
    else
      nil?
    end
  end

  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash =BCrypt::Engine.hash_secret(password, password_salt)
    end
  end

end
class DashboardUsersController < ApplicationController
  def new
    @dashboard_user = DashboardUsers.new
  end

  def create
    @dashboard_user = DashboardUsers.new(params[:user])
    if @dashboard_user.save
      redirect_to index, :notice => 'Signed up!'
    else
      render 'new'
    end
  end
end
Csdashboard::Application.routes.draw do
  resources :dashboard_users
  resources :sessions
  resources :csdashboard
  get '/log_out' => 'sessions#destroy', :as => 'log_out'
  get '/log_in' => 'sessions#new', :as => 'log_in'
  get '/sign_up' => 'dashboard_users#new', :as => 'sign_up'
  root :to => 'dashboard_users#new'
  get '/' => 'csdashboard#index'
  get '/img/:name.:ext', :to => redirect('/assets/%{name}.%{ext}')
  match '/404' => 'errors#not_found'
  match '/422' => 'errors#server_error'
  match '/500' => 'errors#server_error'
end