2011-02-03 53 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