2013-02-01 26 views
11

Trong mô hình Mongoid bên dưới, làm thế nào để tôi bí danh trường mối quan hệ belongs_to?Đặt bí danh một trường mối quan hệ được tham chiếu trong Mongoid

class Contact 
    field :nm, :as => :name, :type => String # field aliasing 
    embeds_one :address, :store_as => :ad # embedded document aliasing 
    belongs_to :account # referenced relation doesn't support store_as 
end 

Tôi muốn lưu trữ id tài khoản trong trường có tên ac thay vì account_id.

Trả lời

1

Mongoid cho phép sử dụng tên tùy ý cho một mối quan hệ bằng cách sử dụng các 'inverse_of'

Nếu một nghịch đảo là không cần thiết, giống như một belongs_to hoặc has_and_belongs_to_many, đảm bảo rằng: inverse_of => nil được thiết lập trên quan hệ. Nếu nghịch đảo là cần thiết, rất có thể nghịch đảo không thể được tìm ra từ tên của các mối quan hệ và bạn sẽ cần phải một cách rõ ràng nói với Mongoid về mối quan hệ nghịch đảo là gì.

Vì vậy, để sử dụng 'ac' như một bí danh đó là cần thiết để thêm inverse_of:

class Contact 
    field :nm, :as => :name, :type => String # field aliasing 
    embeds_one :address, :store_as => :ad # embedded document aliasing 
    belongs_to :ac, class_name: 'Account', inverse_of: :contact 
end 

class Account 
    has_one :contact, class_name: 'Contact', inverse_of: :ac 
end 
+0

này không giải quyết vấn đề của tôi. Tôi muốn tham chiếu đến trường Tài khoản dưới dạng 'tài khoản' thay vì' ac', do đó cần có tính năng bí danh. –

+1

Bạn muốn địa chỉ của conact.ac và contact.account cùng một lúc? Vui lòng giải thích. –

+1

Thư viện Mongoid cung cấp một tính năng để đánh dấu tên trường. Điều này khá hữu ích khi bạn đang xử lý các bộ sưu tập có kích thước lớn. Về cơ bản, nếu bạn nhìn vào kịch bản đầu tiên trong câu hỏi của tôi, tôi lưu trữ tên là 'nm' trong bộ sưu tập nhưng truy cập/truy vấn nó dưới dạng' tên'. Tính năng này hoạt động cho các trường thông thường và các liên kết được nhúng. Đối với liên kết được tham chiếu, không có cách nào được ghi lại để đặt tùy chọn này. –

6

Bạn có thể sử dụng: foreign_key để xác định tên trường MongoDB.

belongs_to :account, foreign_key: :ac 

Tuy nhiên, nếu bạn muốn sử dụng ACCOUNT_ID, bạn cần phải khai báo bí danh của nó:

alias :account_id :ac 

hoặc xác định ACCOUNT_ID trước belongs_to:

field :account_id, as: :ac 
+0

'Foreign_key' cần được đặt ở cả hai bên của mối quan hệ. – user1032752

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