2011-08-17 26 views
5

Có ai có thể tìm cách tìm kiếm trường được tính toán bằng metawhere hoặc metasearch trong đường ray 3 không? Tôi có thể tìm kiếm bất kỳ trường nào trừ trường được tính toán. Phải có một cách. Đối với bất cứ ai không quen thuộc với metasearch hoặc metawhere đây là một railscast.Đường ray Tìm kiếm các trường được tính toán bằng metasearch và metawhere

http://railscasts.com/episodes/251-metawhere-metasearch

+0

Bạn có nghĩa là các trường không được lưu trữ trong cơ sở dữ liệu và được xác định trong mô hình thay thế không? –

+0

có, vui lòng giải thích ý của bạn bằng cách tính toán? –

+0

bởi các trường được tính toán, bạn có nghĩa là các tham số ảo được định nghĩa trong mô hình, được tính toán từ các cột trong bảng cơ sở dữ liệu không? Tôi không nghĩ rằng u có thể tìm kiếm những người sử dụng những đá quý cho rằng, như tìm kiếm cuối cùng sẽ phá vỡ xuống cấp cơ sở dữ liệu. – rubyprince

Trả lời

1

Metawhere (nay Squeel) mở rộng thực hiện ActiveRecord của Arel mà là một máy phát điện SQL. Điều đó có nghĩa nó sẽ biến một số tuyên bố trong SQL ví dụ:

@user.order("birthday").to_sql #=> SELECT users.* FROM users ORDER BY birthday 

Khi bạn làm User.find(:all).sort_by(&:age) bạn đang làm việc trên một kết quả của việc tìm (: tất cả), một mảng, và phân loại được thực hiện trong Ruby với Enumerable đó là chậm hơn và có không có gì để làm với cơ sở dữ liệu.

Vì vậy, không, bạn có thể không sử dụng Metawhere trên

def age 
    date.today - birthday 
end 

trừ khi bạn lưu trữ các kết quả trong cơ sở dữ liệu.

Tuy nhiên bạn có thể sử dụng câu lệnh SQL như COUNT AVG MAX v.v ... với GROUP và HAVING để tính toán trực tiếp trên cơ sở dữ liệu.

User.select("users.*, COUNT(user_id) AS vote_num").joins(:votes).group("user_id")

Các vấn đề liên quan