2011-12-07 33 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