2012-01-06 23 views
6

Cách thay đổi ActiveRecord để luôn có các cột bị giới hạn. Tôi không muốn tất cả các cột trong bảng được quay lại để trình bày trong Mô hình. Điều này không cần thiết làm nổi bật dấu chân bộ nhớ của ActiveRecord cũng như thời gian thực hiện để truy vấn bản ghi.Giới hạn các cột được thể hiện trong ActiveRecord

Có các thuộc tính như chọn (ar.rubyonrails.org/classes/ActiveRecord/Base) có thể được sử dụng để chỉ chọn một vài cột. Nhưng có cách nào chúng ta có thể ép buộc ActiveRecord không bao giờ truy vấn những cột đó được truyền cảm hứng cho người dùng chỉ thực hiện mà không cần chỉ định :select mọi lúc.

Trả lời

9

sử dụng default_scope

ví dụ:

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

    ... 
end 
+0

Cảm ơn. Không biết rằng default_scope được hỗ trợ cũng chọn – jVenki

+0

'default_scope' sẽ lấy bất kỳ kết hợp các phương thức quan hệ và lambdas nào giống như một' phạm vi' bình thường sẽ –

2

bạn không thể làm gì với một phạm vi:

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">] 
Các vấn đề liên quan