2015-03-03 51 views
2

我知道我可以用pluck指定某些字段來查詢數據庫。在Rails和ActiveRecord中查詢時忽略某個字段

ids = Item.where('due_at < ?', 2.days.from_now).pluck(:id) 

但是,我想知道,是否有一種方法來指定某些字段,我想避免從數據庫查詢。某種反採摘?

posts = Post.where(published: true).do_not_lookup(:enormous_field) 
+0

Item.where( 'due_at <?',2.days.from_now).MAP {| A | a.attributes.except!(「email」,「id」)。values} – user3118220 2015-03-03 13:59:32

+0

參見我的回答 – user3118220 2015-03-03 13:59:44

回答

5

Model#attribute_names應該返回數組的列/屬性。您可以排除其中一些並傳遞給pluckselect方法。

像這樣:

posts = Post.where(published: true).select(Post.attribute_names - ['enormous_field']) 
+0

pluck比select要快得多 - http://guides.rubyonrails.org/active_record_querying.html#pluck – Anthony 2015-03-03 13:31:01

+0

不是, 'pluck'在引擎蓋下使用'select',它只是將結果作爲一個數組返回,而將'select'作爲記錄。 – tompave 2015-03-03 13:37:15

+0

@tompave這個傢伙不同意。超過90%的採摘速度更快:http://gavinmiller.io/2013/getting-to-know-pluck-and-select/ – 2015-03-03 13:38:32