2012-07-04 77 views
5

sau khi googling chuyên sâu Tôi bây giờ sẽ nêu ra một vấn đề mà dường như không xảy ra thường xuyên, nhưng vẫn còn rất cơ bản. Danh sách được Liên kết trong Bản ghi Hoạt động. Theo như tôi bây giờ, chúng ta cần hai hiệp hội trong mô hình:Rails ActiveRecord Model Danh sách liên kết

class Child < ActiveRecord::Base 
    belongs_to :parent 
    belongs_to :next, :class_name => 'Child', :foreign_key => 'next_id' 
    belongs_to :previous, :class_name => 'Child', :foreign_key => 'previous_id' 
end 

Vì vậy, bây giờ chúng tôi có thể nhận được tất cả trẻ em của cha mẹ:

children = Child.where("parent_id = ?", parent_id) 

Và bây giờ đến câu hỏi: Tôi muốn tất nhiên để có được tất cả trẻ em từ cơ sở dữ liệu với một truy vấn, nhưng tôi cũng muốn đi qua các trẻ em theo thứ tự liên kết, có nghĩa là người đầu tiên sẽ là đứa trẻ có thuộc tính trước đó là nil, đứa con tiếp theo sẽ là người được kết nối bởi thuộc tính đầu tiên tiếp theo, v.v. cho đến khi thuộc tính tiếp theo là 0. Có thể làm điều đó như thế này không, hoặc tôi có cần truy vấn đứa trẻ đầu tiên, và sau đó đi từ đứa trẻ này sang con khác mà không cần "săn mồi"?

+0

trẻ em? trẻ em – Maysam

Trả lời

2

Các đá quý resortranked-model là các lựa chọn thay thế khác. Cách đầu tiên sử dụng cách tiếp cận tương tự như danh sách được liên kết. Cách thứ hai sử dụng thuộc tính vị trí.

+0

Cuối cùng chúng tôi đã kết thúc bằng cách sử dụng xếp hạng-mô hình –

1

Có lẽ bạn nên sử dụng đá quý acts_as_list. Nó lưu trữ vị trí của mục trong danh sách và thậm chí phạm vi đối tượng cha mẹ cho danh sách và belongs_to. nó cũng sẽ giải quyết vấn đề này bằng cách cho phép bạn truy vấn tất cả các phần tử và sau đó sắp xếp chúng một cách chính xác.

+1

Suy nghĩ cũng vượt qua tâm trí của tôi, nhưng behavior_as_list không cung cấp cho bạn lợi ích chính của danh sách liên kết - chèn và loại bỏ giá rẻ từ các vị trí tùy ý. – Chowlett

+0

tốt đẹp để biết gem_list_list (bởi vì cho đến bây giờ, tôi đã thực hiện điều này một mình) nhưng chính xác đây là những gì tôi muốn thoát khỏi .... nếu xóa một đối tượng, tôi chỉ muốn thay đổi các thuộc tính của trước đó và mô hình tiếp theo, và không đi qua hàng trăm hàng thay đổi thuộc tính vị trí –

+1

Bạn có thể ghi đè phương thức 'destroy' và làm cho nó cập nhật thuộc tính của hàng xóm. – Draiken

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