3 Stimmen

Rails - Ändern Sie das HTML-Element basierend auf der vergangenen Zeit ab einem Datum

Okay, mein Titel ist vielleicht nicht der beste Weg, um zu beschreiben, was ich versuche zu tun, aber wie könnte ich im Allgemeinen die Farbe eines div-Elements ändern (durch Anwendung unterschiedlicher CSS-Klassen) basierend auf der Zeitdistanz von einem Datum?

Ich nutze dies:

<%= todo.due ? todo.due.strftime("%b %d") : nil %>

um ein Fälligkeitsdatum anzuzeigen.

Es ist in einem div umschlossen und ich möchte die Klasse dieses div ändern, wenn das Fälligkeitsdatum mehr als eine Woche entfernt ist, 3 Tage entfernt ist, heute oder überfällig ist.

Sollte dies mit einiger Kontroller-Logik behandelt werden, oder würden if else-Anweisungen in der Ansicht funktionieren?

4voto

Valery Kvon Punkte 4428

Es ist zu einfach...

Helper:

1) Tagsüber:

def style_by_daytime
  case Time.now.hour
  when (6..14) then "Morgen"
  when (14..20) then "Tagsüber"
  when (20..23) then "Abend"
  when (0..6) then "Nacht"
  end
end

2) Nach vergangener Zeit

def style_by_days_gone(by_date)
  vergangen = (Date.today - by_date).round
  case vergangen
  when (1..7) then "Woche"
  when (8..14) then "Zwei Wochen"
  when (15..30) then "Monat"
  when (31..180) then "Mehrere Monate"
  else
    if vergangen > 180
      "Vor langer Zeit"
    end  
  end
end

Ansicht:

<% if todo.due %>

   <%= todo.due.strftime("%b %d") %>

<% end %>

4voto

sameera207 Punkte 16307

Sie könnten dies in Ihrem Helper tun

def css_select(fällig) 
  css_class = "übergeben" #=> Frist bereits abgelaufen
  days_due = (fällig - Date.today).to_i
  if days_due > 0
     css_class = case  days_due
                   when (0..3) then "dreitagetage" #=> zwischen 3 Tagen
                   when (3..7) then "innerhalb7tage" #=> zwischen 7 Tagen
                   else
                   "mehralseinerwoche" #=> mehr als eine Woche
                end 
  end
  css_class
end

Bitte beachten Sie, dass dreitagetage, übergeben, innerhalb7tage und mehralseinerwoche CSS-Klassen sind, deren Namen Sie möglicherweise ändern möchten.

Dies sind die Tests, die ich gemacht habe

p css_select(Date.parse("2012-12-01")) #=> übergeben
p css_select(Date.parse("2012-12-25")) #=> innerhalb von 3 Tagen
p css_select(Date.parse("2012-12-31")) #=> innerhalb von 7 Tagen
p css_select(Date.parse("2013-01-10")) #=> mehr als 7 Tage

also in Ihrer Ansicht

  #Ihr Code kommt hier hinein

also wenn Sie in der Ansicht sind, und diese Antwort wurde durch die Antwort inspiriert, die von @Valery Kvon gegeben wurde

HTH

1voto

iltempo Punkte 15416

Sie können den content_tag helper verwenden und einen benutzerdefinierten Klassenwert bereitstellen. Der Klassenwert kann in einem Hilfsprogramm platziert werden.

Ansicht:

<%= content_tag :div, :class => todo_class(todo) do -%>
  <%= todo.title %>
<% end -%>

Hilfsprogramm:

def todo_class(todo)
  if todo.due
    'fällig'
  ...
  end
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X