2010-02-04 19 views
5

Giả sử User có nhiều Document s và một đơn Document chúng hiện đang hoạt động. Làm thế nào để tôi đại diện cho điều này trong đường ray?Đường ray: has_many, nhưng cũng có một tên khác

Tôi muốn nói current_user.current_document = Document.first (có hoặc không có current_ ở phía trước tài liệu) và không thay đổi bộ sưu tập current_user.documents.

Đây là những gì tôi có:

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :documents 
    has_one :document 
end 

vấn đề là khi tôi nói current_user.document = some_document, nó loại bỏ các tài liệu được lưu trước đó trong current_user.document từ current_user.documents. Điều này có ý nghĩa do mối quan hệ has_oneDocument có, nhưng không phải là những gì tôi muốn. Làm thế nào để tôi sửa chữa nó?

Trả lời

8

Bạn cần thay đổi mô hình của bạn để

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :documents 

    # you could also use :document, but I would recommend this: 
    belongs_to :current_document, :class_name => "Document" 
end 

T.B. Nhưng hãy cẩn thận của tiết kiệm cyclic. Nếu bạn tạo một người dùng mới (và không lưu nó) và thiết lập current_document và sau đó lưu người dùng bạn có thể nhận được tràn ngăn xếp hoặc các lỗi điên khác.

+1

Cảm ơn! Và chỉ để rõ ràng cho người khác, tên cột trong trường hợp này sẽ là 'current_document_id' trong bảng' users'. – Peter

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