2012-01-06 13 views
6

Jak zmienić ActiveRecord tak, aby zawsze zawierał ograniczony zestaw kolumn. Nie chcę, aby wszystkie kolumny w tabeli z tyłu były obecne w Modelu. Powoduje to niepotrzebne rozmyślanie śladu pamięci ActiveRecord, a także czas potrzebny na wysłanie zapytania do rekordu.Ograniczenie kolumn reprezentowanych w ActiveRecord

Istnieją takie atrybuty jak select (ar.rubyonrails.org/classes/ActiveRecord/Base), które mogą być użyte do WYBORU tylko kilku kolumn. Ale czy istnieje sposób, w jaki możemy zmusić ActiveRecord, aby nigdy nie wysyłał zapytań do tych kolumn ze względu na użytkownika wykonującego wyszukiwanie bez ciągłego określania :select.

Odpowiedz

9

zastosowanie default_scope

np

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

    ... 
end 
+0

Dzięki. Nie wiedziałem, że opcja default_scope jest włączona, wybierz również – jVenki

+0

'default_scope' będzie zawierał dowolną kombinację metod relacyjnych i lambdas jak normalny' scope' –

2

nie można zrobić z zakresu:

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">] 
Powiązane problemy