我有一个登录页面,我想通过提交电子邮件ID和密码登录。但是当我输入正确的电子邮件ID和密码时,我收到的错误如下所示。
错误:
NoMethodError in SessionsController#create
undefined method `authenticate' for #<Class:0x502b300>
提取的来源(第6行):
def create
user = User.where(:email => params[:session][:email].downcase).first
if user && User.authenticate(params[:session][:password])
redirect_to:action => 'users/show'
else
render 'new'
end
Rails.root:c:/Site/loginuser
我将在下面提供我的所有代码段。
在app / views / users / new.html.erb中:
<%= form_for(:session, url:"add" ) do |f| %>
<h1>Log in</h1>
<p>
<label for="username" class="uname" data-icon="u" > Your email or username </label>
<%= f.text_field:email,placeholder:"Enter your registered email" %>
</p>
<p>
<label for="password" class="youpasswd" data-icon="p"> Your password </label>
<%= f.password_field:password,placeholder:"Enter your password" %>
</p>
<p class="keeplogin">
<input type="checkbox" name="loginkeeping" id="loginkeeping" value="loginkeeping" />
<label for="loginkeeping">Keep me logged in</label>
</p>
<p class="login button">
<%= f.submit:"Login" %>
</p>
<p class="change_link">
Not a member yet ?
<a href="#toregister" class="to_register">Join us</a>
</p>
<% end %>
在app / controller / sessions_controller.rb
中class SessionsController < ApplicationController
def new
end
def create
user = User.where(:email => params[:session][:email].downcase).first
if user && User.authenticate(params[:session][:password])
redirect_to:action => 'users/show'
else
render 'new'
end
end
end
在config / routes.rb
中Rails.application.routes.draw do
get 'sessions/new'
get 'users/new'
get 'users/show'
post 'users/add' => 'sessions#create'
resources:users
resources :sessions
end
有人可以帮我解决这个问题。
答案 0 :(得分:0)
您尚未指定在user.rb中是否有按名称进行身份验证的方法。
如果您已在user.rb中使用该方法,请确保在方法定义中使用 self.authenticate 而不是简单的身份验证。
上述原因是,在Ruby类中创建方法时,您需要将该方法与该类的实例相关联,以便从该类中访问该方法。
请参阅此链接以获取更多信息http://railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/