将字符串插入到ruby方法的一部分

时间:2012-10-02 00:57:35

标签: ruby-on-rails ruby

我的项目可以是红色,黄色,绿色等几个属性之一(比这更复杂),并且它们具有相应的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 

我该怎么做?

事先提前

2 个答案:

答案 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,因为键可以很容易地动态组合。