Fix get type Name from scope

This commit is contained in:
Jinzhu 2015-12-25 11:50:27 +08:00
parent f8c3ad6af3
commit 4677215ef4
2 changed files with 12 additions and 4 deletions

View File

@ -88,6 +88,12 @@ func TestRelated(t *testing.T) {
t.Errorf("Should have two emails") t.Errorf("Should have two emails")
} }
var emails3 []*Email
DB.Model(&user).Related(&emails3)
if len(emails3) != 2 {
t.Errorf("Should have two emails")
}
var user1 User var user1 User
DB.Model(&user).Related(&user1.Emails) DB.Model(&user).Related(&user1.Emails)
if len(user1.Emails) != 2 { if len(user1.Emails) != 2 {

View File

@ -407,18 +407,20 @@ func (scope *Scope) count(value interface{}) *Scope {
} }
func (scope *Scope) typeName() string { func (scope *Scope) typeName() string {
value := scope.IndirectValue() typ := scope.IndirectValue().Type()
if value.Kind() == reflect.Slice {
return value.Type().Elem().Name() for typ.Kind() == reflect.Slice || typ.Kind() == reflect.Ptr {
typ = typ.Elem()
} }
return value.Type().Name() return typ.Name()
} }
func (scope *Scope) related(value interface{}, foreignKeys ...string) *Scope { func (scope *Scope) related(value interface{}, foreignKeys ...string) *Scope {
toScope := scope.db.NewScope(value) toScope := scope.db.NewScope(value)
fromFields := scope.Fields() fromFields := scope.Fields()
toFields := toScope.Fields() toFields := toScope.Fields()
for _, foreignKey := range append(foreignKeys, toScope.typeName()+"Id", scope.typeName()+"Id") { for _, foreignKey := range append(foreignKeys, toScope.typeName()+"Id", scope.typeName()+"Id") {
var fromField, toField *Field var fromField, toField *Field
if field, ok := scope.FieldByName(foreignKey); ok { if field, ok := scope.FieldByName(foreignKey); ok {