2016-07-27 3 views
0

Ich habe Eintrag Modell mit Attribut Kalorien und Datum. Ich habe auch Benutzer Modell mit Attribut expected_calories. Wenn ich die Liste der Einträge anzeigen, sollte es rot sein, wenn die Summe der Kalorien pro Tag mehr als expected_calories ist, sonst sollte grün sein.Wie ändert man die Farbe des Datensatzes entsprechend dem Wert seines Attributs in Rails?

entries_controller.rb

def index 
@entries = Entry.where(user_id: current_user.id) 
@user = current_user 
if @user.role == 'admin' 
    @entries = Entry.all 
end 

Ende

index.html.slim

 h1 Listing entries 

    table.table 
     thead 
     tr 
      th Date 
      th Time 
      th Content 
      th Cal 
      th User 
      th 
      th 
      th 

     tbody 
     - if can? :manage, Entry 
      - @entries.each do |entry| 
      tr 
       td = entry.date 
       td = entry.time.strftime("%H:%M") 
       td = entry.content 
       td = entry.cal 
       td = entry.user.role 
       td = link_to 'Show', entry 
       td = link_to 'Edit', edit_entry_path(entry) 
       td = link_to 'Destroy', entry, data: { confirm: 'Are you sure?' }, method: :delete 

    br 

    = link_to 'New Entry', new_entry_path 
+0

Können Sie teilen Was hast du bisher? (vor allem auf der Ansicht Teil) –

+0

Ich habe hinzugefügt. Aber ich weiß immer noch nicht, wie ich es machen soll. –

Antwort

1

Dies ist ein sehr schnell schmutzig Weg, dies zu tun:

- if can? :manage, Entry 
    - @entries.each do |entry| 
    tr(style="background-color: #{entry.calories > current_user.expect_calories ? 'red' : 'green'}) 

Ich würde Ihnen empfehlen, einige CSS-Klassen zu erstellen. Zum Beispiel:

.expected-calories { 
    background: green 
} 
.unexpected-calories { 
    background: green 
} 

Dann ein Verfahren, in dem helpers/entries_helper erstellen:

def expected_calories_class(user, entry) 
    if user.expected_calories <= entry.calories 
    'expected-calories' 
    else 
    'unexpected-calories' 
    end 
end 

So würde Ihrer Meinung nach besser lesbar sein (und die Logik wäre prüfbar):

- if can? :manage, Entry 
    - @entries.each do |entry| 
    tr(class=expected_calories_class(current_user, entry)) 
+0

Aber ich habe undefined Methode '<= 'für Null: NilClass Meinten Sie? <=> Extrahiert Quelle (um Zeile # 3): Modul EntriesHelper def expected_calories_class (Benutzer, Eintrag) wenn user.expected_cal <= entry.cal 'erwartet Kalorien' sonst 'unerwartete-Kalorien' –

+0

ist ' current_user' set? –

+0

Ich benutze Devise, es sollte drin sein. –

Verwandte Themen