Ruby on Rails Thursday, March 28, 2013

Recently I discovered one thing I didn't even think about, or I believed it to work absolutely differently.
So, to explain it, given the following models:

class Project < AR
  has_many :participants
end

class Participant < AR
  belongs_to :project
end

Here is what is going in the console:

irb(main):003:0> p=Project.create(:name=>'java')
  ←[1m←[36m (0.0ms)←[0m  ←[1mSAVEPOINT active_record_1←[0m
  ←[1m←[35mSQL (43.0ms)←[0m  INSERT INTO "projects" ("created_at", "name", "updated_at") VALUES (?, ?, ?)  [["
created_at", Thu, 28 Mar 2013 19:27:06 UTC +00:00], ["name", "java"], ["updated_at", Thu, 28 Mar 2013 19:27:06
 UTC +00:00]]
  ←[1m←[36m (0.0ms)←[0m  ←[1mRELEASE SAVEPOINT active_record_1←[0m
=> #<Project id: 1, name: "java", created_at: "2013-03-28 19:27:06", updated_at: "2013-03-28 19:27:06">
irb(main):004:0> p.participants
  ←[1m←[35mParticipant Load (0.0ms)←[0m  SELECT "participants".* FROM "participants" WHERE "participants"."pro
ject_id" = 1
=> []
irb(main):005:0> part = p.participants.new(username:'toto')
=> #<Participant id: nil, username: "toto", project_id: 1, created_at: nil, updated_at: nil>
irb(main):006:0> p.participants
=> [#<Participant id: nil, username: "toto", project_id: 1, created_at: nil, updated_at: nil>]

I always believed that the collection of participants should keep the same size (zero in the above case) until I call save on the Project object. As you see the collection has been changed by 1, despite the record has not been yet save to the database; Is it a normal behaviour ?

Thanks in advance for your help.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/bpYguEZnmpEJ.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments:

Post a Comment