Nach der Anmeldung ich eine Aktions-Controller Ausnahme erhalten:current_user als null nach dem Login wirft NoMethodError
NoMethodError in StaticPages # Hause
nicht definierte Methode 'E-Mail' für nil: NilClass
Was gilt nil ist current_user
in Zeile 12 des Teil folgenden _comment.html.erb
:
<li id="comment-<%= comment.id %>">
<%= link_to gravatar_for(comment.user, size: 30), comment.user %>
<span class="comment-content"><%= link_to comment.user.name, comment.user %> <%= comment.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(comment.created_at) %> ago.
<% if current_user?(comment.user) %>
<%= link_to "delete", comment, method: :delete, remote: true %>
<% end %>
</span>
<% if logged_in? && (current_user == comment.user || current_user = comment.micropost.user) %>
<div class="reply-section">
<%= link_to gravatar_for(current_user, size: 20), current_user %>
<%= form_for(current_user.replies.build) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div><%= f.hidden_field :comment_id, value: comment.id %></div>
<div class="reply-box">
<%= f.text_area :content, rows: "1", class: "reply_area" %>
</div>
<%= f.submit "Reply", class: "btn btn-primary btn-xs" %>
<% end %>
</div>
<% end %>
<div class="replies-section">
<% if comment.replies.any? %>
<ol id="replies_comment-<%= comment.id %>">
<% comment.replies.each do |reply| %>
<%= render reply %>
<% end %>
</ol>
<% end %>
</div>
</li>
Die E-Mail der Ausnahme ist die E-Mail in der Definition von gravatar_for
.
Wenn ich die 12. Zeile entfernen, ist die Ausnahme ausgelöst undefined Methode 'Antworten' für Nil: NilClass, das ist current_user
in der folgenden Zeile.
Der obige Teil wird in den Mikropartisteil als <%= render comment %>
eingefügt. Ich habe versucht, den Code direkt in der Mikroparte Teil hinzuzufügen, aber die Ausnahme wird trotzdem ausgelöst.
Der Code, der die Ausnahme auslöst, gehört zur Antwortfunktion: Ein Benutzer kann eine Mikropost, einen Kommentar zu einer Mikropost und eine Antwort auf einen Kommentar veröffentlichen.
Ich verstehe nicht, warum current_user
gilt als Null nach dem Login.
current_user
wird in der Sitzung Helfer wie folgt definiert:
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(:remember, cookies[:remember_token])
log_in user
@current_user = user
end
end
end
zwei Linien über den bedingten, if logged_in?
überprüft, dass current_user
einfach nicht Null sein, da Verfahren logged_in?
Außerdem als !current_user.nil?
definiert ist, wird current_user
viele Male genannt in der Micropart Partial, in dem der Kommentar partial eingefügt wird, aber rails beginnt an diesem Punkt die Ausnahme auszulösen.