2010-01-29 49 views

回答

39

首先,轉換爲字符串。

class_name = symbol.to_s 

從那裏,你需要將字符串格式化爲使用ActiveSupport's Inflector提供的方法正確的類名。

  • camelize會變成'my_module''MyModule'
  • classify會變成'my_models''MyModel'

camelize更可能你想要的,因爲你的代碼段。

然後使用constantize方法:

klass = class_name.constantize 

優雅!

4

我正在尋找計算器的這個答案,但沒有找到它的措辭我是如何尋找它,所以我想我會Q &一個自己:

答案以上是正確的,但我實際上可以發現,解釋好一點的文檔:

基本上有兩種方法:

  • .to_s.camelize - 當你的單數形式使用(:後)
  • .to_s.classify - 當你有一個複數形式使用( :posts)

從那以後,你可以調用constantize和Viola!你有你的班級。

+0

姆姆。這取決於你是否要傳遞實際的類名稱:MyClass,或者更喜歡':my_class'格式。 – Matchu 2010-01-29 18:38:47

+0

是的,沒錯。那是絆倒我的部分。特別是單數和複數的區別。 – dpb 2010-01-29 18:41:10

+2

看起來像Rails 3的更新版本http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html – christophercotton 2011-01-27 16:08:20

相關問題