我的项目可以是红色,黄色,绿色等几个属性之一(比这更复杂),并且它们具有相应的is_red,is_yellow,is_green布尔值。
我希望有一个api函数来改变我传递的值,例如:
id: 12
type: red
在我的函数中有:
item=Item.find(id)
if item.is_ + type == true
item.is_ + type=false
end
我该怎么做?
事先提前答案 0 :(得分:5)
使用send
item = Item.find(id)
if item.send(:"is_#{type}") == true
item.send(:"is_#{type}=", false)
end
答案 1 :(得分:-1)
你不能在不使用eval
的情况下在Ruby中动态构建变量名,这会很脏但功能正常。
您可以在BlankSlate对象上使用method_missing
来捕获自由文本方法调用,并将它们作为一个大的脏案例语句处理。
最优雅的解决方案是Hash,因为键可以很容易地动态组合。