如何根据Rails中它的属性值改变记录的颜色?

时间:2016-07-27 20:18:15

标签: javascript ruby-on-rails

我的条目模型的属性卡路里日期。我还有用户模型,其属性为 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

1 个答案:

答案 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))