Ruby on rails 在RubyonRails中构建用户身份验证,得到了未定义的方法“dashboard\uUsers\uIndex\uPath';
我观看了railscast以构建您自己的用户身份验证。我得到了这个未定义的方法错误。应该在哪里定义此方法,控制器、模型还是两者都不定义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
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
文件吗?Dorake 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