2015-05-02 21 views
6

Tôi khá mới trên Nodej và buồm. Tôi đang triển khai một máy chủ tương tự với Twitter. Trong mô hình người dùng, phải có 2 trường: theo sau và sau, và 2 trường là liên kết của chính người dùng mô hình đó.Mô hình Sails.js: tạo 2 liên kết thành tự thất bại

Câu hỏi của tôi là khi mô hình chỉ có 1 liên kết, theo sau hoặc theo dõi, nó hoạt động. Tuy nhiên, khi cả hai người theo dõi và sau đây được bao gồm, sẽ có lỗi vi.

Mã này là một cái gì đó như thế này:

module.exports = { 
    attributes: { 
    alias: { 
    type:'string', 
    required: true, 
    primaryKey: true 
    }, 
    pwd: { 
    type: 'string', 
    required: true 
    }, 
    follower: { 
     collection: 'user', 
     via: 'alias' 
    }, 
    following:{ 
     collection: 'user', 
     via: 'alias' 
    } 
} 

Mã sẽ gây ra lỗi như vậy:

usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/references.js:115 
throw new Error('Trying to associate a collection attribute to a model tha 
    ^
Error: Trying to associate a collection attribute to a model that doesn't have a Foreign Key. user is trying to reference a foreign key in user 
at References.findReference (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/references.js:115:11) 
at References.addKeys (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/references.js:72:22) 
+0

How are you Populating mô hình của bạn trong các mã điều khiển? Nếu không sử dụng populateAll(), bạn có cung cấp tên thuộc tính để điền() không? –

+0

@AlexAlksne Tôi cư trú như thế này: 'User.find ({alias: item.alias}). Điền vào ('follower'). Exec (console.log);' Thực ra, tôi chỉ định nghĩa 'following', thậm chí không bao giờ sử dụng nó . Sau đó, các cánh buồm báo cáo lỗi khi lifing. –

+0

Rất tiếc, mọi thứ có vẻ đúng. Tôi đang bối rối cho đến nay; nó không nhiều nhưng nếu bạn nhìn vào dòng gây ra lỗi trong references.js nó có nhận xét này: "Nếu không tìm thấy thuộc tính nào phù hợp, hãy ném một lỗi vì bạn đang cố gắng thêm thuộc tính hasMany vào mô hình trong đó liên kết không 't có một khóa nước ngoài phù hợp với bộ sưu tập. " –

Trả lời

3

Đối với việc sử dụng như vậy định nghĩa mô hình của bạn là không chính xác, cụ thể là via từ khóa. Theo các tham chiếu từ khóa waterline associations docsvia từ phía bên kia của liên kết. Vì vậy, đối với một số follower phía bên kia là following và ngược lại. Nói cách khác:

follower: { 
    collection: 'user', 
    via: 'following' 
}, 
following:{ 
    collection: 'user', 
    via: 'follower' 
} 

Bạn có thể kiểm tra một ví dụ làm việc đầy đủ tại địa chỉ: https://github.com/appscot/sails-orientdb/blob/master/test/integration-orientdb/tests/associations/manyToMany.selfReferencing.js

+0

Cảm ơn ví dụ của bạn. Nó chắc chắn những gì tôi cần. Nhưng tôi nghĩ rằng sẽ có cùng một vấn đề trong một số tình huống. Hãy xem xét có 2 nhóm được xác định, một là những kẻ mà anh ghét, và một nhóm khác là những người anh yêu. Vì vậy, mô hình nên như thế này: '{ \t bí danh: 'string' \t ghét: { \t \t bộ sưu tập: 'user', \t \t qua: 'bí danh' \t}, \t tình yêu: { \t \t bộ sưu tập: 'user', \t \t qua: 'bí danh' \t}} ' nó sẽ gây ra cùng một vấn đề, phải không? Làm thế nào tôi có thể tránh nó? –

+0

Tôi nghĩ bạn sẽ cần tạo 2 liên kết tự tham chiếu riêng biệt. Một liên kết sẽ là 'loves' /' lovedBy' và một liên kết khác sẽ là 'hates' /' hatedBy'. Hy vọng rằng sẽ giúp! –

+0

Thực sự hữu ích. Cảm ơn rất nhiều ~~. :-) –

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