Well, when in doubt, check the source code. In 3.0, create checks new? which looks to see if id.nil? In 3.1 and above, it also checks new?, but now, new? checks to see if the object has been persisted (which is different from checking to see if id is defined).