From 7a334f648f4bf1d216758a01e7c2f550e0f5deb1 Mon Sep 17 00:00:00 2001 From: lame-nickname Date: Fri, 11 Apr 2014 21:23:46 +0200 Subject: [PATCH] Add model inheritance via struct's anonymous fields --- scope.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scope.go b/scope.go index 543c4cde..806af4f7 100644 --- a/scope.go +++ b/scope.go @@ -237,12 +237,21 @@ func (scope *Scope) Fields() []*Field { continue } + value := indirectValue.FieldByName(fieldStruct.Name) + iface := value.Interface() + elem := reflect.Indirect(value) + + if fieldStruct.Anonymous && elem.Kind() == reflect.Struct { + inner_fields := scope.New(iface).Fields() + fields = append(fields, inner_fields...) + continue + } + var field Field field.Name = fieldStruct.Name field.DBName = toSnake(fieldStruct.Name) - value := indirectValue.FieldByName(fieldStruct.Name) - field.Value = value.Interface() + field.Value = iface field.IsBlank = isBlank(value) // Search for primary key tag identifier @@ -257,7 +266,6 @@ func (scope *Scope) Fields() []*Field { field.SqlTag = scope.sqlTagForField(&field) // parse association - elem := reflect.Indirect(value) typ := elem.Type() switch elem.Kind() {