Я следовал официальному учебнику по , но что-то пришло.
Я успешно создал пользователя, но при попытке 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.erb
руководства использует @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 (только что установленную сегодня, независимо от того, какая это версия), и, насколько может судить мой усталый и расстроенный мозг, у меня есть все необходимые поля в базе данных, и они написаны правильно .
Что происходит?