2012-01-06 22 views
6

ActiveRecord nasıl değiştirilir, böylece her zaman kısıtlanmış bir sütun kümesi bulunur. Modelde sunulmak için destekli tablonun tüm sütunlarını istemiyorum. Bu, ActiveRecord'un bellek ayak izini ve kaydı sorgulamak için harcanan zamanı gereksiz yere şişirir.ActiveRecord'da temsil edilen sütunları kısıtla

Sadece birkaç sütun SEÇ için kullanılabilecek select (ar.rubyonrails.org/classes/ActiveRecord/Base) gibi özellikler vardır. Ancak, ActiveRecord'u hiçbir zaman :select'u belirtmeksizin bulmakta olan kullanıcılara bu sütunları sorgulamak için zorlayabileceğimiz herhangi bir yol var.

cevap

9

kullanımı default_scope

ör

class MyModel < ActiveRecord::Base 
    default_scope select("column1, column2, column3") 

    ... 
end 
+0

teşekkür ederiz. Default_scope destekli seçtiğini de bilmiyordum, – jVenki

+0

'default_scope', ilişkisel yöntemlerin herhangi bir kombinasyonunu alacaktır ve normal bir 'kapsam' gibi lambdalar –

2

bir kapsam ile yapamaz:

IGNORED = %w(id created_at updated_at) 
scope :filtered, lambda { select(cols) } 

def self.cols 
    attribute_names = [] 
    attributes = self.columns.reject { |c| IGNORED.include?(c.name) } 

    attributes.each { |attr| attribute_names << attr.name } 
    attribute_names 
end 

Model.filtered 
[#<Model name: "Test 2", reg_num: "KA 02", description: "aldsfjadflkj">] 
İlgili konular