On Thursday, 30 October 2014 13:56:51 UTC-4, Markus D. wrote:
>
> Hello,
>
> I just stumbled upon a behaviour about associations I do not really 
> understand why Rails/ActiveRecord cannot get the connection. Using 
> activerecord (4.2.0.beta2).
>
> To describe it, lets work with theses models:
>
> class User < ActiveRecord::Base
>     has_many :project_participations
>     has_many :projects, through: :project_participations, inverse_of: :users
> end
>
> class ProjectParticipation < ActiveRecord::Base
>     belongs_to :user
>     belongs_to :project
>
>     enum role: { member: 0, manager: 1 }
> end
>
> class Project < ActiveRecord::Base
>     has_many :project_participations
>     has_many :users, through: :project_participations, inverse_of: :projects
> end
>
>
> A user can participate in many projects with a role as a member or a 
> manager. The connecting model is called ProjectParticipation. 
>
> I now have a problem using the associations on unsaved objects. The 
> following commands work like I think they should work:
>
> # first example
>
> u = User.new
> p = Project.new
>
> u.projects << p
>
> u.projects
> => #<ActiveRecord::Associations::CollectionProxy [#<Project id: nil>]>
>
> u.project_participations
> => #<ActiveRecord::Associations::CollectionProxy [#<ProjectParticipation id: 
> nil, user_id: nil, project_id: nil, role: nil>]>
>
>
> So far so good - AR created the ProjectParticipation by itself and I can 
> access the projects of a user with u.projects. 
>
> But it does not work if I create the ProjectParticipation by myself:
>
> # second example
>
> u = User.new
> pp = ProjectParticipation.new
> p = Project.new
>
> pp.project = p # assign project to project_participation
>
> u.project_participations << pp # assign project_participation to user
>
> u.project_participations
> => #<ActiveRecord::Associations::CollectionProxy [#<ProjectParticipation id: 
> nil, user_id: nil, project_id: nil, role: nil>]>
>
> u.projects
> => #<ActiveRecord::Associations::CollectionProxy []>
>
>
> Why are the projects empty? I cannot access the projects by u.projects 
> like before, even the ProjectParticipation is there.
>
> But if I go through the participations directly, the project shows up:
>
> u.project_participations.map(&:project)
> => [#<Project id: nil>]
>
> Shouldn't it work like the first example directly:
> u.projects returning me all projects not depending on whether I create the 
> join object by myself or not? Or how can I make AR aware of this?
>
>
`u.projects` is going to load things from the database if the record is 
saved, but otherwise it will only return objects you've explicitly stored 
in it.

The `through` association is not the same as just mapping `&:project` over 
project_participations.

Can you describe what you're trying to do in more detail? There's likely a 
way to make AR do the right thing.

--Matt Jones 

-- 
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+unsubscr...@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/msgid/rubyonrails-talk/301e3be4-1ede-43c5-8396-ac374bcd3344%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to