2009-10-02 58 views

回答

7
str_modelname.classify.constantize.find(:first) 
+0

這真是太棒了... +1 – Twisol 2009-10-02 08:45:54

+0

儘管這個解決方案比我提供的解決方案更漂亮,但我仍然主張我的,因爲它可以讓您限制可以使用它的一組類。另外,請注意,如果輸入錯誤,您不會檢查NameError和NoMethodError。 – giorgian 2009-10-02 08:51:51

+0

但是這確實回答了這個問題。然後由開發人員來申請任何申請所需的警衛。 – Damian 2009-10-02 09:04:39

1

這段代碼,但我不會說它是最好的方式:

str = "User" 
p Kernel.const_get(str).find(:first) 

我基於this technique

+0

問題是,字符串從哪裏來?如果是來自用戶,這可能是不安全的...... – giorgian 2009-10-02 08:45:49

+0

這似乎是問題固有的問題,而不是這個特定的解決方案。 – Twisol 2009-10-02 08:46:44

2

有幾種方法,其中一個可使用的哈希,如:你爲什麼需要這個

models[name] ? models[name].find(:first) : nil 

models = {"User" => User, "AnotherModel" => AnotherModel} 

然後呢?可能有更好的解決方案,取決於你需要做什麼。