我的条目模型的属性卡路里和日期。我还有用户模型,其属性为 expected_calories 。当我显示条目列表时,如果每天的卡路里总和超过 expected_calories ,则应为红色,否则应为绿色。
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 :(得分: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))