2016-06-05 2 views
1

Ich habe eine Rails App mit mehreren Namaspaces wie Benutzer, Management, Admin. was bedeutet, ich habe current_user, current_management, current_admin.rails Zeitzone in mehreren Benutzer-Namespaces behandeln, auch wie funktioniert around_action?

  1. Wie sollte ich die Zeitzoneneinstellungen für diese verschiedenen Benutzer-Namespaces behandeln. Ich lese das (https://robots.thoughtbot.com/its-about-time-zones), aber es zeigt current_user. Was soll ich mit current_management machen?

  2. Was macht "around_action" in diesem Kontext? Wenn der Benutzer die Zeitzone aktualisiert, was passiert, oder sollte ich etwas explizit einstellen?

  3. wenn ich die zeit anzeigen, sollte ich immer in_time_zone tun? wenn ich das tun muss, warum muss der Application Controller Code?

https://robots.thoughtbot.com/its-about-time-zones

hier ist ein Code, es Anforderung in Anwendungssteuerung setzen

# app/controllers/application_controller.rb 
around_action :set_time_zone, if: :current_user 

private 

def set_time_zone(&block) 
    Time.use_zone(current_user.time_zone, &block) 
end 

sagt es wie dieses

<%= time.in_time_zone(current_user.time_zone) %> 

Antwort

0
  1. in der aktuellen Zeitzone anzeigen kann nimmst du einfach current_management.time_zone stattdessen?
  2. around_action wird den Ausführungsblock an Time.use_zone übergeben, Ändern der Zeitzone innerhalb der Aktion und Ansichten des Controllers, aber nicht auf der Außenseite.
  3. Sie müssen around_action nicht verwenden, wenn Sie in_time_zone verwenden (und umgekehrt). Dadurch wird das Zeitobjekt in eine bestimmte Zeitzone konvertiert. Ich glaube, in_time_zone ist eine sicherere Lösung.
+0

danke für deine antwort. Also wird around_action dazu führen, dass die gesamte App die Zeitzone verwendet? also muss ich auf jedem display in_time_zone verwenden? Ich mochte das tatsächlich (https://gist.github.com/anonymous/7ea8dd867c8ccb2c802470a01858e014) und ich denke, es funktionierte, aber nicht sicher, die Nebenwirkungen davon, da ich auf meinem eigenen einen Benutzer ausgeführt habe, nicht versucht, die Auswirkungen mehrerer Benutzer – Axil

+0

@Axil 'around_action' wirkt sich nur auf den Controller-Code und die Aufrufe aus und auf alles, was darin aufgerufen wird. Die Zeitzone für die gesamte App wird nicht global geändert. Sie müssen 'in_time_zone' nicht verwenden, wenn Sie' Time.use_zone' für Datenbankobjekte verwenden, da der aktive Datensatz sie in die aktuelle Zeitzone konvertiert. – Bartosz

+0

ok das heißt mein Code ist gut? – Axil

Verwandte Themen