2011-12-21 43 views
2

在Rails 3.1,我想用一個創建一個接受參數數據的方法來創建一個嵌入的對象,但我想知道如果有一個更優雅的方式來做到這一點比下面的案例教學法:在Ruby中,除了'case - when'之外,還有其他更優雅的方法來調用方法嗎?

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

這不是'send'的語法。 'send'接受一個方法名稱,然後是它的參數。 – Linuxios 2011-12-21 19:09:57

回答

11

send方法需要賦予方法相同的參數被稱爲:

User.send("create_#{obj}", data) 

不管這是最優雅的解決方案取決於:我要離開的決策過程到User類,這可能以多種方式發生(例如,像這樣的發送,Proc等的散列)。工廠服務是另一種選擇。

User.create(how, data) # "how" is a, b, c 

無論在哪裏生活,使其明顯–這使得它易於擴展,修復和推理。

+0

謝謝。這正是我所期待的,我還沒有嘗試過這種結構。 – Scott 2011-12-22 01:05:51

相關問題