code: func (meta *Meta) PreInitialize() error {
  	if meta.Name == "" {
  		utils.ExitWithMsg("Meta should have name: %v", reflect.TypeOf(meta))
  	} else if meta.FieldName == "" {
  		meta.FieldName = meta.Name
  	}
  
  	// parseNestedField used to handle case like Profile.Name
  	var parseNestedField = func(value reflect.Value, name string) (reflect.Value, string) {
  		fields := strings.Split(name, ".")
  		value = reflect.Indirect(value)
  		for _, field := range fields[:len(fields)-1] {
  			value = value.FieldByName(field)
  		}
  
  		return value, fields[len(fields)-1]
  	}
  
  	var getField = func(fields []*gorm.StructField, name string) *gorm.StructField {
  		for _, field := range fields {
  			if field.Name == name || field.DBName == name {
  				return field
  			}
  		}
  		return nil
  	}
  
  	var nestedField = strings.Contains(meta.FieldName, ".")
  	var scope = &gorm.Scope{Value: meta.BaseResource.GetResource().Value}
  	if nestedField {
  		subModel, name := parseNestedField(reflect.ValueOf(meta.BaseResource.GetResource().Value), meta.FieldName)
  		meta.FieldStruct = getField(scope.New(subModel.Interface()).GetStructFields(), name)
  	} else {
  		meta.FieldStruct = getField(scope.GetStructFields(), meta.FieldName)
  	}
  	return nil
  }
docs: // PreInitialize when will be run before initialize, used to fill some basic necessary information