2016-07-27 41 views
0

我有条目带属性的模型卡路里日期。我也有用户模型属性expected_calories。当我显示条目列表时,如果每天的卡路里总和大于expected_calories,则应该显示为红色,否则应为绿色。如何根据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 

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

你能分享你到目前为止有什么? (特别是在视图部分) –

+0

我已添加。但仍然不知道如何制作。 –

回答

1

这是这样做的一个非常快速的肮脏的方式:

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

我建议你创建一些css类。例如:

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

然后创建在helpers/entries_helper的方法:

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

所以,你的看法会更可读(和逻辑是可测试):

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

但是我得到了 未定义的方法'<='为零:NilClass 您的意思是? <=> 提取的源(围绕线#3): 模块EntriesHelper DEF expected_calories_class(用户,条目) 如果user.expected_cal <= entry.cal '预期-卡路里' 别的 '意外-卡路里' –

+0

是' current_user'设置? –

+0

我使用Devise,它应该在它。 –

相关问题