在Rails 3.1中,我想通过使用接受参数数据的create方法创建一个嵌入对象,但我想知道是否有比下面的case方法更优雅的方法:
def method_call(obj,data)
case obj
when 'a' then User.create_a(data)
when 'b' then User.create_b(data)
when 'c' then User.create_c(data)
end
end
我真的想做类似下面的事情,但由于我传递的数据,这会导致错误:
def method_call(obj,data)
User.send("create_#{obj}")(data)
end
有什么建议吗?提前谢谢。
答案 0 :(得分:11)
send
方法采用与被调用方法相同的参数:
User.send("create_#{obj}", data)
这是否是最优雅的解决方案取决于:我将决策过程保留到User
类,这可能以各种方式发生(例如,像这样的发送,Proc
s的散列等。工厂服务是另一种选择。
User.create(how, data) # "how" is a, b, c
无论生活在哪里,都要明白 - 这样可以轻松扩展,修复和推理。