Schienen: undefined method `strftime' for nil:NilClass, aber Wert (ohne strftime) zurück OK
Ich habe ein seltsames problem mit einem (rails 3) activerecord-Abfrage.
Wenn ich submit query #1 (unten) zur Ansicht (unten) funktioniert alles einwandfrei...aber wenn ich submit query #2 (unten), bekomme ich "undefined method `strftime' for nil:NilClass"
...Wenn ich allerdings die Streifen der string strtime Weg von query #2, es gibt den unformatierten Zeit einfach gut.
"Professionelle Spezialitäten" ist eine has_many :through-Tabelle; ich nehme an, dass hat etwas damit zu tun...aber ich kann einfach nicht herausfinden, was.
Irgendeine Idee was Los ist??? Alle Vorschläge willkommen:
Abfrage #1 (funktioniert gut)
@professionals = Professional.all(:include => :user, :conditions => ["users.first_name = ? AND users.last_name = ?", params[:name][:first], params[:name][:last]])
Abfrage #2 (Pausen strtime)
@professionals = Professional.all(:include => [:user, :professional_specialties], :conditions => ["professional_specialties.profession_type_id = ?", params[:profession_type]] )
Ansicht
<% @professionals.each do |p| %>
<tr>
<td><%= link_to("%s %s" % [p.user.first_name, p.user.last_name], p) %></td>
<td><%= p.business %></td>
<td><%= p.user.role.name %></td>
<td><%= p.user.created_at %></td>
<td><%= p.user.last_sign_in_at.strftime("%Y") %></td>
</tr>
<% end %>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein best guess wäre, dass die beiden Abfragen geben Sie verschiedene resultsets. In der zweiten Ergebnismenge, die eine oder mehrere der Benutzer hat eine
NULL
Wert für dielast_sign_in_at
Spalte.Laufen
Professional.all(...).map(&:users)
in der Rails-Konsole (rails console
"in Ihrem Anwendungsverzeichnis), und überprüfen Sie, dass alle Sie haben eine gültige Zeitstempel.<%= p.user.last_sign_in_at.try(:strftime, "%Y") %>
strftime
ist keine gültige Methode fürnil
. Es wäre eine sehr schlechte Idee, hinzufügen von Methoden ausTime
zunil
, weil wo würden Sie die Grenze ziehen? WasString
undArray
? Nach dieser Logik, sollte nichtnil.downcase
odernil.first
auch wieder null-ohne eine Fehlermeldung?nil
. Tatsächlich, ich habe gesehen, eine option, die in Schienen zu sagen# Log error messages when you accidentally call methods on nil. config.whiny_nils = true
imdevelopment.rb
. Stattdessen sollten wir in der Lage sein zu rufenstrftime(user.created_at, '%d/%m/%y')
so dassstrftime(nil, '%d %m %y') --> nil
. Es ist eigentlich sehr einfach zu schreiben!