Andrew wrote:
> I'll try to explain this as best as I can... I have an Assignment and
> User model, with users having many assignments and the assignment
> belonging to a user. But, along with assignments having one owner, I'd
> like for assignments to have multiple "secondary" owners, through the
> use of "has_many :through => assignments_users". Is this possible? I
> tried to implement this but I got an error saying an assignment with
> the user id of 1 can't be found, when there were assignments with the
> user_id as 1, but it was looking through the assignments_users table.
> Thanks!

User
  has_many :assignments_users
  has_many :assignments, :through => :assignments_users
end

Assignment
  has_many :assignments_users
  has_many :users, :through => :assignments_users
  belong_to :owner, :class => User, :foreign_key => :owner_id
end

AssignmentUser
  belongs_to :assignment
  belongs_to :user
end

Would provide these message:
@user.assignments
@assignment.users
@assignment.owner

However, I would likely alter the naming of these objects somewhat.

Something like:

User
  has_many :assignments
  has_many :projects, :through => :assignments
end

Project
  has_many :assignments
  has_many :users, :through => :assignments
  belong_to :owner, :class => User, :foreign_key => :owner_id
end

Assignment
  belongs_to :project
  belongs_to :user
end

In this case User and Project are solidly nouns. Assignment (although 
could be a noun) servers better for linking Users to Projects. However, 
this is really just semantics, although I do make an effort to give my 
joining models a good solid name when using has_many :through.

I like this because the act of assigning a project to a user can be more 
easily thought of from a RESTful perspective. In order to "create" an 
association between a user and a project, one would create an 
assignment.

assignments_controller
---------------
def create
  user # assume this exists
  project # assume this exists
  @assignment = Assignment.new
  @assignment.user = user
  @assignment.project = project
end

Note: The above code is intended for demonstration purposes only. This 
could be re-factored to reduce the complexity of the controller code.
-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to