2011-02-03 62 views
1

我有一个Ruby on Rails应用程序,我希望能够动态选择要返回到数据库的字段。这就是我的意思:如何动态选择字段在Rails中返回

假设我有一个名为Dog的数据库表,该表的字段为“id”,“name”,“color”。

如果我想狗#7S的名字,我能明显只是做:

d = Dog.find(7) 
the_output = d.name 

不过,我想要做的就是动态地选择回什么领域狗#7。因此,假设我已经定义:

the_field = "name" 

我希望能够做一些事情,如呼叫:

d.(the_field) 

,并使其返回的狗的名字。 (我在这里使用括号,因为在MATLAB中,你可以这样做(我一直都在这样做),它可以工作,但在Rails中不起作用。)这样做的明显优点是,我可以在其他地方程序集the_field = "color",并有我相同的代码返回狗的颜色,而不是名称。

我试着这样做:

Dog.find(d.id, :select=>the_field) 

但返回一个Dog对象,不只是含有狗的名字的字符串。而且,由于在代码中,我不知道哪个字段被调用,我不知道如何只提取包含我想要的字段的字符串。

所以希望这一切都有道理,并希望有一些人知道如何做到这一点。

谢谢!

Q

回答

1

这样的事情呢?

class Dog < ActiveRecord::Base 
    def self.query_field(id, field) 
    find(id).send(field) 
    end 
end 

field = :name 
Dog.query_field(7, field) # "Roscoe" 
field = :color 
Dog.query_field(7, field) # "brown" 
+0

艾哈! `send()`命令正是我所需要的。辉煌。谢谢。 – Quad 2011-02-03 01:06:01