因此,我有一个禁用和启用功能的标志.并将基于它必须切换的标志的变量

flag_a,flag_b是我的两个特征标志,变量输入字符串可以是none,all,flag_a,flag_b作为输入字符串,我们还可以进一步添加更多的标志,如FLAG_c或FLAG_D等等.

def input
  variable = stdin "value"
  update_flag(value.upcase)
end

def update_flag(value)
 case value
 when "ALL"
    toggle_flag(flag_a, true)
    toogle_flag(flag_b, true)
 when "FLAG_A"
    toggle_flag(flag_a, true)
    toogle_flag(flag_b, false)
 when "FLAG_B"
    toggle_flag(flag_a, false)
    toogle_flag(flag_b, true)
 when "NONE"
    toggle_flag(flag_a, flase)
    toogle_flag(flag_b, false)
end

def toggle_flag(name, flag)
  if flag
    Featureflag.user(@id).enable(name.to_sym)
  else
    Featureflag.user(@id).disable(name.to_sym)
  end
end 

我想要一种将值发送到变量的方法,此输入仅作为输入通过控制台发送.

try 让它变得干燥,同时也让它变得乐观,对于灵活的方法来说必须很容易 注"输入仅作为输入通过控制台发送" 另外,如果我们添加FLAG_C,那么我们需要有一种方法来接受多个输入,这些输入必须被启用,而REST必须被禁用

推荐答案

为此,您不需要WHEN条件,只需使用标志名称来判断是否需要启用或禁用该功能,如

def input
  variable = stdin "value"
  update_flag(value.upcase)
end

def update_flag(value)
  toggle_flag("flag_a", value)
  toggle_flag("flag_b", value)
end

def enable_feature?(name, flag)
  return true if flag == "BOTH"
  return false if flag == "NONE"

  flag.downcase == name
end

def toggle_flag(name, flag)
  if enable_feature?(name, flag)
    Featureflag.user(@id).enable(name.to_sym)
  else
    Featureflag.user(@id).disable(name.to_sym)
  end
end

UPDATE:

根据建议:

在CASE语句较大的情况下

FLAGS = [
  "flag_a",
  "flag_b",
  "flag_c",
]

def input
  value = prompt_input("Enter value:").upcase
  update_flags(value)
end

def update_flag(value)
  FLAGS.each do { |flag_name| toggle_flag(flag_name, value) }
end

def enable_feature?(name, flag)
  return true if flag == "BOTH" || flag == "ALL"
  return false if flag == "NONE"

  flag.downcase == name
end

def toggle_flag(name, flag)
  if enable_feature?(name, flag)
    Featureflag.user(@id).enable(name.to_sym)
  else
    Featureflag.user(@id).disable(name.to_sym)
  end
end

Ruby-on-rails相关问答推荐

在Ruby on Rails中获取堆栈级别太深错误(&Q)

Rails 6升级没有加载Mongoid,这是一个问题

ActiveRecord::声明在类别中无效#new

Rails 7.0.4 和 link_to 的数据确认不起作用

Rails 7 共享刺激控制器功能

如何创建一个融合了另外两个记录的 FactoryBot 工厂?

Gem::Ext::BuildError:ERROR:无法在macOS Monterey上构建Gem本机扩展

Factory Girl + Mongoid 在fixture 中嵌入文档

在 Windows 上安装特定的 Ruby on Rails 版本

如何独立测试模型的回调方法?

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

.increment vs += 1

在 PostgreSQL 中强制字符串的最大长度

我如何找出为什么我不能#destroy() 记录?

在本地 Rails 开发环境中获取真实 IP 地址

如何在 Ruby 中生成随机日期?

如何在 Rails 3 中将多个属性传递给 find_or_create_by?

设计:在注册期间禁用密码确认

Active Record has_many:通过删除一条关联记录

ActionMailer 在开发 Rails 4 中不发送邮件