J'ai suivi le official Authlogic tutorial mais quelque chose est apparu.Après le didacticiel Authlogic mais: méthode non définie `email 'pour # <UserSession: {: unauthorized_record =>" <protected> "}>
J'ai créé avec succès un utilisateur, mais lorsque je tente de show
sa page de profil, je reçois l'erreur suivante:
undefined method `email' for #<UserSession: {:unauthorized_record=>"<protected>"}>
Voici le code correspondant:
# 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
Je pense que ce l'ensemble chaîne. Et voici la vue:
# views/users/show.html.erb
<%=h @user.username%>
email: <%=h @user.email %>
<%= link_to "Edit", edit_account_path %>
Lorsque je supprime la ligne « e-mail », je reçois une page avec seulement le lien « Modifier ». Le nom d'utilisateur n'apparaît pas. Toutefois, lorsque j'ajoute <%= debug @user %>
pour voir ce qui se passe, il imprime correctement les valeurs pour email
et username
comme stockées dans la base de données. Je ne sais pas pourquoi il n'imprime pas @user.username
, et pourquoi il jette une erreur lorsque j'essaie d'imprimer @user.email
. Il convient de noter que show.html.erb
layout of the tutorial utilise , et cela fonctionne. Je viens de changer "login" en "nom d'utilisateur".
De plus, lorsque je clique sur "Edit", je reçois la même erreur originale:
undefined method `email' for #<UserSession: {:unauthorized_record=>"<protected>"}>
est ici la mise en page edit
et la forme utilisée partielle:
# 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 />
Encore une fois, tous pris mot pour mot le tutoriel, ça marche. Je cours Rails 2.3.2 et le dernier Authlogic (juste installé aujourd'hui, n'importe quelle version qui est), et autant que mon cerveau fatigué et frustré peut dire, j'ai tous les champs requis dans la base de données, et they are spelled correctly.
Que se passe-t-il?
La méthode 'current_user' renvoie' @ current_user'. Mais j'ai essayé quand même et rien n'a changé. Mais merci. –