Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于枚举更改类颜色_Ruby On Rails_Ruby_Class_Enums - Fatal编程技术网

Ruby on rails 基于枚举更改类颜色

Ruby on rails 基于枚举更改类颜色,ruby-on-rails,ruby,class,enums,Ruby On Rails,Ruby,Class,Enums,我有一个这样的训练模型: class Workout < ApplicationRecord belongs_to :user validates :date, :kind, presence: true validates :template, inclusion: { in: [true, false] } enum kind: { other: 0, swim: 1, bike: 2, run: 3 } has_many :comments, as: :co

我有一个这样的训练模型:

class Workout < ApplicationRecord
  belongs_to :user

  validates :date, :kind, presence: true
  validates :template, inclusion: { in: [true, false] }

  enum kind: { other: 0, swim: 1, bike: 2, run: 3 }

  has_many :comments, as: :commentable
end
td
  .row
    .col-md-6
      = day.to_formatted_s(:short)
    .col-md-6.text-right
      = link_to 'Add +', new_team_user_workout_path(date: day, athlete: @athlete)
  - unless @workouts[day].blank?
    - @workouts[day].each do |workout|
      = link_to team_user_workout_path(@team, current_user, workout, athlete: params[:athlete]) do
        .workout
          .workout-kind.text-semibold
            = workout.kind.capitalize
          - unless workout.distance.blank?
            .workout-spec.text-light
              | Distance:
              | &nbsp;
              = workout.distance/1000
              | &nbsp;km
          - unless workout.duration.blank?
            .workout-spec.text-light
              | Duration:
              | &nbsp;
              = workout.duration/60
              | &nbsp;mins
如果enum是'swim',我想在训练中添加这样一个类:Workout.swim。如果enum为“bike”,则应附加Workout.bike类,以便我可以更改背景色

在Rails中这样做的最佳实践是什么


谢谢。

您可以使用“询问”方式检查枚举对象。枚举?,因此您可以执行以下操作:

.workout{ class: ('swim' if workout.swim?) }
如果训练不是游泳,它不会打印任何内容

如果为每个可能的枚举定义了一个类,则还可以执行以下操作:

.workout{ class: workout.kind }

如果类swim已经定义,并且它与枚举同名,那么这将起作用。

这听起来像是视图帮助器方法的一部分。。。rails的基本方法是在
/app/helpers/workout\u helper.rb
中放置一个方法。或者另一种常见的方法是创建“视图模型”,例如,使用,这样您就可以在
WorkoutDecorator
类上定义该方法。但是,对于这一点没有唯一正确的答案。这实际上取决于应用程序的技术堆栈的外观。。。例如,许多现代应用程序使用SPA前端;在这种情况下,训练种类-->颜色的映射可能是用JavaScript定义的,而不是ruby。您可以简单地在类列表中添加种类,为不同的类添加css,例如
.swim{background color:“#ff0000”}
。其他{background color:#f0f0f0”}
感谢您的回复@TomLord。如果我选择了helper方法,你能详细说明一下这个函数是什么样子的吗?我还在学习Rails atm。而且,应该说@TomLord不仅仅是“游泳”课。根据训练项目是游泳、自行车、跑步还是其他,它应该有不同的背景色。谢谢你的回答,塞巴斯蒂安。我假设我可以添加到该行以检查多个枚举。训练{课程:('swim'如果训练。swim?('bike'如果训练。bike?)}。对吗?另外,您是否知道此项的SLIM语法?在这种情况下,
workout.swimswim':“bike”
考虑到只有两个枚举值可用。或者也可以只打印种类值
训练。种类应打印或“游泳”或“自行车”。不确定,但您可以尝试
div class=(workout.swim??“swim:”bike')
@Andy。实际上,您非常喜欢只打印锻炼.kind并将其附加为一个类的想法。我会看看我能不能做到。很好的解决方案。我通过添加.workout class=“#{workout.kind}”使其生效。谢谢