2011-01-18 36 views
5

Tôi có một mô hình Thực thể và tôi muốn hiển thị các kết nối giữa các Thực thể. Ví dụ, Thực thể 1 được kết nối với Thực thể 2.Các mô hình tự tham chiếu trong Rails 3

Suy nghĩ của tôi, ngay bây giờ, là tạo mô hình kết hợp giữa hai được gọi là Kết nối và có nó hoạt động giống như bảng nối đường truyền thống. Ngoại trừ các cột là entity_one_id và entity_two_id, sau đó thiết lập mối quan hệ nhiều-nhiều giữa Thực thể và Kết nối.

Điều này có vẻ như một cách thực sự không thanh lịch để thực hiện việc này. Tôi đã tự hỏi nếu có ai có bất kỳ ý tưởng tốt hơn? Có lẽ một cái gì đó rails-esque mà tôi chỉ không nhìn thấy?

Trả lời

8

Đó là cách phổ biến nhất để thực hiện điều đó. Nếu một thực thể chỉ được kết nối với một mô hình khác, bạn có thể sử dụng cấu trúc giống cây, danh sách liên kết.

Khám phá Ryan Bates' Railscast on self-joining models. Nó đề cập đến một hệ thống mạng xã hội giống như, nhưng nó vẫn có nguyên tắc bạn sẽ cần và cung cấp một điểm khởi đầu tuyệt vời

1

Bạn có thể sử dụng thực hiện điều này:

class User < ActiveRecord::Base 
    has_many :friends, :through => :friendships, :conditions => "status = 'accepted'" 
    has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at 
    has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending'", :order => :created_at 
    has_many :friendships, :dependent => :destroy 
end 


class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
end 
+3

việc thực hiện bạn đã ăn cắp từ railscast Ryan? :) – sethvargo

+3

Thật vậy tôi không nhớ nơi tôi nhặt nó lên, nhưng bạn chắc chắn đúng :) – apneadiving

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