2012-04-21 43 views
39

在rails中構建sql查詢以僅從數據庫中選擇某些列的方式是什麼?我有一些大數據字段,我想避免從連續的週期性ajax調用中加載。不必要的閱讀是資源消耗和緩慢。Ruby rails - 從數據庫中只選擇幾列

@itemlist = Item.find(:all, :conditions => { .... }) #this select all columns 

我要找的SELECT name, address FROM users;代替SELECT * FROM users;

+2

通常,如果你不需要/使用等欄目,你應該考慮數據標準化。 – 2012-04-21 09:46:16

回答

93

Rails 3:

Item.select("name, address").where(....)

+0

是的,太棒了!推薦這個,因爲Rails 3比第二個更受歡迎 – 2013-04-13 13:07:24

+2

另外值得注意的是,如果你的'SELECT'語句中有多個表,並且你引用了一個可能存在於多個表中的列,在select中包含表,如'select(「items.name,users.address」)'。 – 2014-08-27 16:39:28

+0

我連接表時不工作 – Chinmay235 2016-05-20 10:12:13

2

試試這個:

@itemlist = Item.find(:all, :select => "name, address", :conditions => { .... }) 
21

。利用:select構建的。試試這個:

@itemlist = Item.select('name, address', conditions: { .... }) 

對於以前版本的Rails:

@itemlist = Item.find(:all,:select => 'name, address', :conditions => { .... }) 
+4

這不再正確,並且在Rails 4中不受支持。回答需要更新。 – superluminary 2015-05-21 15:21:26

+1

superluminary的評論後,答案已經更新,以反映新的.select語法。 – 2015-11-10 20:26:25

8

使用阿雷爾(又名Rails中3),使用:

Item.where(...).select("name, address") 

而且,它似乎如果得到。選擇忽略你在一個範圍有一個:include => ...

+0

感謝您的幫助! – 2012-04-21 14:08:22

5
@itemlist = Item.select('name, address').where(...#some condition)