PicoJournal – Endlich die Hauptfunktionalität

Heute hatte ich viel Zeit und habe zuerst ein bisschen Rails Lektüre gelesen und wollte mich dann direkt auf die Hauptfunktionalität, die Posts stürzen. Doch dann tauchte das erste Problem auf: Die Anmeldung klappte nicht mehr. Deswegen zuerst ein kleiner Nachtrag zum letzten Post und dann mehr Funktionalität für die Hauptposts.

 

Login Reparieren

Der Login funktionierte nicht mehr und ich vermutete schon, dass es am Einbau des Usernamens lag. Also überprüfte ich alles was damit in Zusammenhang stand, doch fand keine Gründe dafür. Die Lösung fand sich wie immer beim googeln. In der Datei config/initializers/devise.rb musste folgende Zeile geändert werden.

#alt
config.authentication_keys = [ :login ]
#neu
config.authentication_keys = [ :username ]

Beim Login dann natürlich in der view noch email durch username ersetzen. Dann habe ich zur Sicherheit noch bundle update gemacht und den Server neu gestartet und dann gings wieder!

 

Posts als Liste beginnen

Als Hauptpunkt wollte ich die Posts minimal benutzbar machen. Es soll für jeden Tag seit Registrierung ein Post angezeigt werden und falls an diesem Tga noch nichts eingetragen wurde, wird ein „Tag hinzufügen“ Link angezeigt. Dabei habe ich die meiste Zeit darauf verschwendet herauszufinden wie man mit dem Datumsformat hantiert, da ich diese ja vergleichen und durchlaufen muss. Dafür zunächst eine Schleife mit Tagen wie folgt:

<%
 start_date = current_user.created_at.to_date #wichtig hier das to_date
 end_date = Date.today
 end_date.downto(start_date).each do |date|

   puts date

 end
 %>

Jetzt erhält man alle Tage, beginnend mit dem aktuellen, seit Registrierung. Zuerst wollte ich (start_date..end_date).reverse machen, doch das ist nicht möglich. Deswegen die downto Funktion. 

Innerhalb dieser Schleife vergleiche ich nun das Datum mit den Posts des Users darauf, ob einer mit diesem Datum existiert. Ich bin mir nicht sicher ob das eventuell etwas ineffizient ist, doch es funktioniert und das ist mir bei meinem momentanen Rails-Wissensstand genug. 

<%
 start_date = current_user.created_at.to_date #wichtig hier das to_date
 end_date = Date.today
 end_date.downto(start_date).each do |date|


   if(@days.exists? date: date)
    @days.where(date: date).each do |day|
    %>
      <!-- Der Post -->
    <%end%>
    <%else%>
      <!-- Der leere Post mit Link zum Erstellen -->
   <%end%>
<%end%>

Funktioniert! Das Ergebnis bei einem 2 Tage alten Account:

Link zur Live Version

postsliste

Das ist die Funktionalität, die ich haben möchte! Es fehlt natürlich noch die Pagination um nur einen Monat anzuzeigen, das Bild und das Rating. Letzteres hab ich noch geschafft, das zeige ich jetzt aber nicht. Für die anderen zwei Dinge gibt es die Rails Gems namens Paperclip und willPaginate. Diese schaue ich mir dann das nächste Mal an.

pfeildings

Na das war doch was diese Woche! Wenn man beide Augen zudrückt könnte man PicoJournal diese Woche zum ersten Mal ‚benutzbar‘ nennen! Es ist zwar nicht gut aber darauf kann ich aufbauen! Ich freue mich schon auf nächste Woche im Railsland.

*isst/trinkt Wassermelone*