2011-12-07 34 views
3

我有一個部分,它應該根據params[:controller]變量訪問各種控制器的實例變量。使用singularizedowncase,我定義了實例變量的名稱,它是按照慣例的單數形式的控制器名稱。我只收到String。我怎樣才能調用命名爲字符串的實例變量?如何基於params [:controller]動態地訪問實例變量?

比如我有控制器Articles,所以我做到以下幾點:

params[:controller].singularize.downcase # => "article" 

現在我要訪問@article。我怎樣才能做到這一點?

回答

10

在紅寶石中有一個instance_variable_get()方法。因此,嘗試這樣的事情:

var_name = params[:controller].singularize.downcase # article 
instance_variable_get("@#{var_name}") 

P.S:記住,你應該在適當的環境中使用instance_variable_get

+0

謝謝你的工作很棒! – davidb

+0

不客氣:) – bor1s

+0

很好的答案。我從中學到並感激:) – jaydel