【发布时间】:2010-02-11 07:27:10
【问题描述】:
我关注了official Authlogic tutorial,但出现了一些问题。
我成功创建了一个用户,但是当我尝试show他的个人资料页面时,我收到以下错误:
undefined method `email' for #<UserSession: {:unauthorized_record=>"<protected>"}>
以下是相关代码:
# user.rb
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.crypto_provider = Authlogic::CryptoProviders::BCrypt
c.require_password_confirmation(false)
end
attr_accessible :username, :email, :password
end
# users_controller.rb
def show
@user = @current_user
end
# application_controller.rb
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session and current_user_session.user
end
我认为这是整个链条。这是视图:
# views/users/show.html.erb
<%=h @user.username%>
email: <%=h @user.email %>
<%= link_to "Edit", edit_account_path %>
当我删除“电子邮件”行时,我得到一个只有“编辑”链接的页面。用户名不出现。但是,当我添加 <%= debug @user %> 以查看发生了什么时,它会正确打印存储在数据库中的 email 和 username 的值。我不知道为什么它不打印@user.username,以及为什么当我尝试打印@user.email 时它会抛出错误。
需要注意的是show.html.erblayout of the tutorial使用@user.login,它可以工作。我只是将“登录”更改为“用户名”。
此外,当我单击“编辑”时,我得到相同的原始错误:
undefined method `email' for #<UserSession: {:unauthorized_record=>"<protected>"}>
这是edit 布局和使用的部分表单:
# views/users/edit.html.erb
<h1>Edit My Account</h1>
<% form_for @user, :url => account_path do |f| %>
<%= f.error_messages %>
<%= render :partial => "form", :object => f %>
<%= f.submit "Update" %>
<% end %>
<br />
<%= link_to "My Profile", account_path %>
#views/users/_form.erb
<%= form.label :username %><br />
<%= form.text_field :username %><br />
<br />
<%= form.label :email %><br />
<%= form.text_field :email %><br />
<br />
<%= form.label :password, form.object.new_record? ? nil : "Change password" %><br />
<%= form.password_field :password %><br />
<br />
再一次,所有内容都是从教程中逐字记录的,这很有效。
我正在运行 Rails 2.3.2 和最新的 Authlogic(今天才安装,无论是什么版本),据我疲惫和沮丧的大脑所知,我确实在数据库中有所有必填字段,并且 @ 987654323@.
发生了什么事?
【问题讨论】:
标签: ruby-on-rails authentication forms session authlogic