2015-05-02 17 views
6

Nodejs ve yelkenlerde oldukça yeniyim. Twitter'ı andıran bir sunucu uyguluyorum. Kullanıcı modelinde 2 alan bulunmalıdır: takip eden ve takip eden ve 2 alan 'modelin' modelinin birleşimidir.Sails.js Model: kendiliğinden başarısız olmak için 2 ilişki oluştur

Benim sorum, modelin yalnızca 1 ilişkilendirmeye sahip olması, takipçisi veya takip etmesi, çalıştığı durumdur. Bununla birlikte, hem takip eden hem de aşağıdakiler dahil edildiğinde, en büyük hata olacaktır. Modeliniz tanımı, yani via anahtar yanlış

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

: Başka bir deyişle:

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

Sen tam bir çalışma örneği kontrol edebilirim? PopulateAll() kullanılmıyorsa, populate() öğesine bir özellik adı mı veriyorsunuz? –

+0

@AlexAlksne Ben şöyle dolduruyorum: 'User.find ({alias: item.alias}) populate ('follower'). Exec (console.log);' Aslında, 'sadece aşağıdakileri tanımlarım,' asla kullanmayın . Ardından yelkenler, hata yaparken hata bildirir. –

+0

Garip, her şey doğru görünüyor. Şimdiye kadar güldüm; çok fazla değil ama reference.js dosyasında hataya neden olan çizgiye bakarsanız şu yorumu yapar: "Eşleşen nitelikler bulunamazsa, ilişkilendirmenin olmadığı bir modele bir hasMany özniteliği eklemeye çalıştığınız için bir hata atın. Koleksiyonla eşleşen yabancı bir anahtar var. –

cevap

3

bu tür bir kullanım için:

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' 
    } 
} 

kod böyle hataya neden olur:

kodu şöyle bir şeydir. waterline associations docs'a göre via anahtar sözcüğü birliğin diğer tarafına başvurur. Yani, follower için diğer taraf following ve tam tersi. Eğer kontrolör kodunda Modellerinizin doldururken nasıl https://github.com/appscot/sails-orientdb/blob/master/test/integration-orientdb/tests/associations/manyToMany.selfReferencing.js

+0

Örneğiniz için teşekkürler. Kesinlikle ihtiyacım olan şey. Ama bence bazı durumlarda aynı sorun olmalı. Tanımlanmış 2 grup var, biri nefret ediyor, diğeri ise sevdiği adamlar. Yani modeli böyle olmalıdır: '{ \t takma: 'dize' \t nefret: { \t \t toplama: aracılığıyla 'kullanıcı', \t \t: 'takma' \t}, \t aşk: { \t \t koleksiyon: 'kullanıcı' aracılığıyla \t \t: 'takma' \t} } ' o olmaz, aynı sorunu neden olur? Bunu nasıl önleyebilirim? –

+0

Bence 2 farklı kendini referanslama ilişkilendirmesi oluşturmanız gerekir. Bir dernek “sevmek”/“sevildi” ve diğeri “nefret”/“nefret” olabilirdi. Umarım yardımcı olur! –

+0

Gerçekten faydalı. Çok teşekkürler ~~. :-) –