Adds processing of ignored fields on Update
This commit is contained in:
		
							parent
							
								
									b507cdf93d
								
							
						
					
					
						commit
						3c01fe7915
					
				@ -252,7 +252,7 @@ func runMigration() {
 | 
				
			|||||||
		DB.Exec(fmt.Sprintf("drop table %v;", table))
 | 
							DB.Exec(fmt.Sprintf("drop table %v;", table))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	values := []interface{}{&Short{}, &ReallyLongThingThatReferencesShort{}, &ReallyLongTableNameToTestMySQLNameLengthLimit{}, &NotSoLongTableName{}, &Product{}, &Email{}, &Address{}, &CreditCard{}, &Company{}, &Role{}, &Language{}, &HNPost{}, &EngadgetPost{}, &Animal{}, &User{}, &JoinTable{}, &Post{}, &Category{}, &Comment{}, &Cat{}, &Dog{}, &Toy{}}
 | 
						values := []interface{}{&Short{}, &ReallyLongThingThatReferencesShort{}, &ReallyLongTableNameToTestMySQLNameLengthLimit{}, &NotSoLongTableName{}, &Product{}, &Email{}, &Address{}, &CreditCard{}, &Company{}, &Role{}, &Language{}, &HNPost{}, &EngadgetPost{}, &Animal{}, &User{}, &JoinTable{}, &Post{}, &Category{}, &Comment{}, &Cat{}, &Dog{}, &Toy{}, &ElementWithIgnoredField{}}
 | 
				
			||||||
	for _, value := range values {
 | 
						for _, value := range values {
 | 
				
			||||||
		DB.DropTable(value)
 | 
							DB.DropTable(value)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								scope.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								scope.go
									
									
									
									
									
								
							@ -833,7 +833,7 @@ func convertInterfaceToMap(values interface{}) map[string]interface{} {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			for _, field := range (&Scope{Value: values}).Fields() {
 | 
								for _, field := range (&Scope{Value: values}).Fields() {
 | 
				
			||||||
				if !field.IsBlank {
 | 
									if !field.IsBlank && !field.IsIgnored {
 | 
				
			||||||
					attrs[field.DBName] = field.Field.Interface()
 | 
										attrs[field.DBName] = field.Field.Interface()
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
				
			|||||||
@ -419,6 +419,37 @@ func TestUpdatesWithBlankValues(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ElementWithIgnoredField struct {
 | 
				
			||||||
 | 
						Id           int64
 | 
				
			||||||
 | 
						Value        string
 | 
				
			||||||
 | 
						IgnoredField int64 `sql:"-"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e ElementWithIgnoredField) TableName() string {
 | 
				
			||||||
 | 
						return "element_with_ignored_field"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestUpdatesTableWithIgnoredValues(t *testing.T) {
 | 
				
			||||||
 | 
						elem := ElementWithIgnoredField{Value: "foo", IgnoredField: 10}
 | 
				
			||||||
 | 
						DB.LogMode(true)
 | 
				
			||||||
 | 
						DB.Save(&elem)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DB.Table(elem.TableName()).
 | 
				
			||||||
 | 
							Where("id = ?", elem.Id).
 | 
				
			||||||
 | 
							// DB.Model(&ElementWithIgnoredField{Id: elem.Id}).
 | 
				
			||||||
 | 
							Updates(&ElementWithIgnoredField{Value: "bar", IgnoredField: 100})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var elem1 ElementWithIgnoredField
 | 
				
			||||||
 | 
						err := DB.First(&elem1, elem.Id).Error
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("error getting an element from database: %s", err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if elem1.IgnoredField != 0 {
 | 
				
			||||||
 | 
							t.Errorf("element's ignored field should not be updated")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestUpdateDecodeVirtualAttributes(t *testing.T) {
 | 
					func TestUpdateDecodeVirtualAttributes(t *testing.T) {
 | 
				
			||||||
	var user = User{
 | 
						var user = User{
 | 
				
			||||||
		Name:     "jinzhu",
 | 
							Name:     "jinzhu",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user