# Updating via the setter. Ignores:

2.2.3 :003 > Child.readonly_attributes
 => #<Set: {"name"}> 
2.2.3 :005 > c = Child.new(name: 'emily')
 => #<Child id: nil, mother_id: nil, created_at: nil, updated_at: nil, name: "emily", age: nil> 
2.2.3 :006 > c.save
   (0.1ms)  begin transaction
  SQL (0.4ms)  INSERT INTO "children" ("created_at", "updated_at", "name") VALUES (?, ?, ?)  [["created_at", "2017-07-04 13:09:49.648017"], ["updated_at", "2017-07-04 13:09:49.648017"], ["name", "emily"]]
   (1.6ms)  commit transaction
 => true 
 2.2.3 :007 > c.name = "em"
 => "em" 
2.2.3 :008 > c.save
   (0.2ms)  begin transaction
  SQL (0.4ms)  UPDATE "children" SET "updated_at" = ? WHERE "children"."id" = ?  [["updated_at", "2017-07-04 13:10:29.451684"], ["id", 17]]
   (1.5ms)  commit transaction
 => true 
2.2.3 :009 > c.reload.name
  Child Load (0.2ms)  SELECT  "children".* FROM "children" WHERE "children"."id" = ? LIMIT ?  [["id", 17], ["LIMIT", 1]]
 => "emily" 
 
 # Increment. Does the operation:
 
 2.2.3 :014 > Child.readonly_attributes
 => #<Set: {"age", "name"}> 
 2.2.3 :011 >   c = Child.create(age:1)
   (0.1ms)  begin transaction
  SQL (0.5ms)  INSERT INTO "children" ("created_at", "updated_at", "age") VALUES (?, ?, ?)  [["created_at", "2017-07-04 13:12:28.415277"], ["updated_at", "2017-07-04 13:12:28.415277"], ["age", 1]]
   (1.3ms)  commit transaction
 => #<Child id: 19, mother_id: nil, created_at: "2017-07-04 13:12:28", updated_at: "2017-07-04 13:12:28", name: nil, age: 1> 
2.2.3 :012 > c.increment!(:age)
  SQL (2.0ms)  UPDATE "children" SET "age" = COALESCE("age", 0) + 1 WHERE "children"."id" = ?  [["id", 19]]
 => #<Child id: 19, mother_id: nil, created_at: "2017-07-04 13:12:28", updated_at: "2017-07-04 13:12:28", name: nil, age: 2> 
2.2.3 :013 > c.reload.age
  Child Load (0.3ms)  SELECT  "children".* FROM "children" WHERE "children"."id" = ? LIMIT ?  [["id", 19], ["LIMIT", 1]]
 => 2
   
# Updating via []=. Ignores:
   
2.2.3 :016 > c = Child.create(name: 'emily')
   (0.1ms)  begin transaction
  SQL (0.5ms)  INSERT INTO "children" ("created_at", "updated_at", "name") VALUES (?, ?, ?)  [["created_at", "2017-07-04 13:16:10.624797"], ["updated_at", "2017-07-04 13:16:10.624797"], ["name", "emily"]]
   (1.4ms)  commit transaction
 => #<Child id: 20, mother_id: nil, created_at: "2017-07-04 13:16:10", updated_at: "2017-07-04 13:16:10", name: "emily", age: nil> 
2.2.3 :017 > c[:name] = 'em'
 => "em" 
2.2.3 :018 > c.save
   (0.1ms)  begin transaction
  SQL (1.2ms)  UPDATE "children" SET "updated_at" = ? WHERE "children"."id" = ?  [["updated_at", "2017-07-04 13:16:17.441827"], ["id", 20]]
   (1.4ms)  commit transaction
 => true 
2.2.3 :019 > c.reload.name
  Child Load (0.2ms)  SELECT  "children".* FROM "children" WHERE "children"."id" = ? LIMIT ?  [["id", 20], ["LIMIT", 1]]
 => "emily" 
    
# write_attribute. Ignores:
    
2.2.3 :020 > c = Child.create(name: 'emily')
   (0.1ms)  begin transaction
  SQL (0.4ms)  INSERT INTO "children" ("created_at", "updated_at", "name") VALUES (?, ?, ?)  [["created_at", "2017-07-04 13:17:36.634634"], ["updated_at", "2017-07-04 13:17:36.634634"], ["name", "emily"]]
   (1.5ms)  commit transaction
 => #<Child id: 21, mother_id: nil, created_at: "2017-07-04 13:17:36", updated_at: "2017-07-04 13:17:36", name: "emily", age: nil> 
2.2.3 :021 > c.write_attribute(:name, 'em')
 => "em" 
2.2.3 :022 > c.save
   (0.1ms)  begin transaction
  SQL (0.6ms)  UPDATE "children" SET "updated_at" = ? WHERE "children"."id" = ?  [["updated_at", "2017-07-04 13:17:49.977649"], ["id", 21]]
   (1.6ms)  commit transaction
 => true 
2.2.3 :023 > c.reload.name
  Child Load (0.2ms)  SELECT  "children".* FROM "children" WHERE "children"."id" = ? LIMIT ?  [["id", 21], ["LIMIT", 1]]
 => "emily" 
    
 
# update_attributes ignores:
    
2.2.3 :025 > c.update_attributes(:name => 'em')
   (0.1ms)  begin transaction
  SQL (0.4ms)  UPDATE "children" SET "updated_at" = ? WHERE "children"."id" = ?  [["updated_at", "2017-07-04 13:18:56.974058"], ["id", 21]]
   (1.5ms)  commit transaction
 => true 
2.2.3 :026 > c.reload.name
  Child Load (0.2ms)  SELECT  "children".* FROM "children" WHERE "children"."id" = ? LIMIT ?  [["id", 21], ["LIMIT", 1]]
 => "emily" 
 
    
# update_attributes! ignores:
    
2.2.3 :027 > c.update_attributes!(:name => 'em')
   (0.2ms)  begin transaction
  SQL (0.4ms)  UPDATE "children" SET "updated_at" = ? WHERE "children"."id" = ?  [["updated_at", "2017-07-04 13:19:31.403373"], ["id", 21]]
   (2.2ms)  commit transaction
 => true 
2.2.3 :028 > c.reload.name
  Child Load (0.2ms)  SELECT  "children".* FROM "children" WHERE "children"."id" = ? LIMIT ?  [["id", 21], ["LIMIT", 1]]
 => "emily" 
    
# update_attribute raises an error:
    
2.2.3 :029 > c.update_attribute(:name, 'em')
ActiveRecord::ActiveRecordError: name is marked as readonly
	from (irb):29
    
    
# remove_attribute doesn't exist in ActiveRecord