2010-12-12 81 views
1

問題1Ruby:如何根據類名獲取類,以及如何根據字段名獲取對象的字段?

如何獲得一類提供類的字符串名字?

例如,假設Product類有do_something方法:

str = "product" 
<what should be here based on str?>.do_something 

問題2

如何獲得對象的字段給出一個字段名作爲字符串?

例如,假設Product類有price領域:

str = "price" 
product = Product.new 
product.<what should be here based on str?> = 1200 

回答

4
  1. 使用capitalizeconstantize

    str.capitalize.constantize.do_something 
    
  2. 使用send

    product.send(str + '=', 1200) 
    
+1

'constantize'不是標準的Ruby不過,看到http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-constantize – 2012-09-05 19:31:53

+1

使用['public_send'(HTTP:// ruby​​- doc.org/core/Object.html#method-i-public_send)而不是'send',以避免繞過方法可見性。 – 2014-08-10 23:55:51

5

Jacob對第一個問題的回答假設您使用的是Rails,如果是的話,它將正常工作。如果你不是,你可以打電話Kernel::const_get(str)找到一個現有的常數名稱。

send是一個純粹的紅寶石。不需要用send來實習你的字符串(把它們轉換成符號),直線可以正常工作。

+0

感謝您的澄清! – 2010-12-12 14:12:57