2013-02-03 64 views
0

一起返回列名這是我的代碼:在以利用價值

<%= DimensionVersion.where(:dimension_id => 1).select("name") %> 

我希望得到的尺寸版本名稱的列表,其中:dimension_id => 1,有四個在數據庫中。

相反,我得到這個:

#<ActiveRecord::Relation:0x3d351c8> 

編輯:

我這個想出如何返回我想要的東西(排序):

<%= DimensionVersion.select("name").where(:dimension_id => 1).all %> 

將返回:

[#<DimensionVersion name: "Default">, #<DimensionVersion name: "Test1">, #<DimensionVersion name: "Test2">, #<DimensionVersion name: "Test3">] 

但是,我確實不希望它返回#<DimensionVersion Name: ... >。我試着從領先的標籤中刪除=,但沒有返回。

回答

1

AR返回Relation,這樣就可以鏈狀況等,如果你想要的實際結果,稱#all#first#each,...它:

DimensionVersion.where(:dimension_id => 1).select("name").all 

與導軌查詢是這樣的在即將到來的痛苦中,我即將放棄整個框架並回到php。

您可能想要閱讀指南:Active Record Query Interface

+0

可悲的是我不也是一個密集的人,所以無論多少次,我閱讀和搜索的導遊,我不能把它全部粘住。 –

2
DimensionVersion.where(:dimension_id => 1).select("name") 

我認爲你需要採摘方法。

重寫如上:

DimensionVersion.where(:dimension_id => 1).pluck(:name) 

同樣甚至更高級別的結構等收集能夠用作:

DimensionVersion.where(:dimension_id => 1).collect(&:name) 

希望這有助於。

+0

他們可以,但它確實是一個不好的做法,你加載整個事情只是爲了扔掉幾乎所有的東西。 –

+0

我不確定我是否接到你。 –

+1

當使用pluck查詢命中數據庫將看起來像這樣: 'SELECT name FROM「dimension_versions」WHERE「dimension_versions」。「dimension_id」= 1;' –

0

我能夠通過收集方法,像這樣擺脫了列名:

DimensionVersion.select("name").where(:dimension_id => 1).all.collect { |d| [d.name]} 
+1

更短的說''...收集(&:姓名),如Gaurav所述。我可能也會使用較短的'Hash'語法,'... where(dimension_id:1)' –

+0

感謝您的建議。有什麼方法可以將兩列傳遞給collect,例如'... collect(&:name,:id)'。這對我沒有用。但是使用'..collect {| d | [d.name,d.id]}'確實有效。 –

+1

呃,不;我沒有看到有關收集名稱之外任何內容的任何內容,例如您的答案中的代碼。此外,您實際上正在收集一個名爲數組的名稱而不僅僅是一個名稱數組。考慮退後一步,拿起一些Ruby,它會讓Rails更容易理解。 –