Sure. Strictly speaking, what I ended up with was not polymorphic, but
it suited my project all right. Polymorphic is the fully buzzword-
compliant way to go here, because it would let you have different
validations for each user type, etc.
class Role < ActiveRecord::Base
belongs_to :campaign
belongs_to :user
has_many :approvals, :dependent => :destroy
validates_presence_of :user_id, :on => :create, :message => "can't
be 0"
validates_presence_of :role_name, :on => :create, :message =>
"can't be blank"
# ...
end
class User < ActiveRecord::Base
devise
:database_authenticatable
, :recoverable, :rememberable, :trackable, :validatable, :invitable
has_many :notes, :dependent => :destroy
has_many :roles, :dependent => :destroy
has_many :campaigns, :through => :roles
default_scope :order => 'name'
validates_presence_of :name, :on => :update, :message => "can't be
blank"
attr_accessible
:email, :password, :password_confirmation, :name, :initials
# ...
end
class Campaign < ActiveRecord::Base
has_attached_file :header, :styles => {}
attr_accessible
:name, :campaign_date, :header, :header_fill_color, :page_fill_color
has_many :roles, :order => "position ASC", :dependent => :destroy
has_many :users, :through => :roles
default_scope :order => 'position'
# ...
end
This was Rails 2.3.10, in case that matters to you.
Walter
On Feb 14, 2011, at 10:30 AM, Lille wrote:
Walter,
Yes, Role sounds promising. If it's not too much to ask, could you
please paste some of what you ended up with?
Lille
On Feb 14, 10:04 am, Walter Lee Davis <[email protected]> wrote:
On Feb 14, 2011, at 9:53 AM, Lille wrote:
Jim,
Thanks, but your proposed RecordOwner would have no behavior
distinct
from User and would not describe the relationship from the Project
model's perspective. My User shouldn't care about the kind of
relation
it has to Project, rather the reverse.
My pseudocode is about as specific as I know how to get.
To recap in its most distilled form, my problem is what
relationships
to include in two models, User and Project, where a User may be
associated with Project in any of three ways -- User,
'primary_record_owner', or 'record_owner, such that the following
expressions are possible:
1) @user.projects # returns all projects associated with a User
instance
2) @project.primary_record_owner # returns a User instance
3) @project.record_owners # returns a collection of User instances
4) @project.users # returns a collection of User instances
I think I see how to accomplish 2-4, using HABTM, but I don't see
how
to accomplish 1) at the same time.
Have you thought about a polymorphic join model between the two, like
maybe a Role? That's how I ended up structuring a recent project.
Walter
Thanks,
Lille
On Feb 13, 8:41 pm, Jim Ruther Nill <[email protected]> wrote:
I'm thinking about 4 models
- User
- Project
- RecordOwner
- UserProject -> this is the join table for user and project
You won't need RecordOwner if record_owners is a subset of the
users
association.
Give us an example so we can help out with the options you want.
On Mon, Feb 14, 2011 at 8:17 AM, Lille <[email protected]>
wrote:
Hi,
I want to specify relationships between two classes like that
expressed in the following pseudocode:
class User < ActiveRecord::Base
has_many :projects
end
class Project < ActiveRecord::Base
has_one
:primary_record_owner, :<pseudo_option_for_referring_to>=>"User"
has_many :record_owners, :<pseudo_option_for_referring_to>=>"User"
has_many :users # this refers to User, too
end
From the above I seek the following kind of results:
@user.projects # returns all projects associated with the user
from
any of the three User associations in Project
@project.primary_record_owner # returns the User instance
@project.record_owners # returns the collection of User instances
@project.users # returns User instances, not necessarily
overlapping
with the other associations
The intent I mean to express is that a Project can have any of
three
levels of relationship with a User, while a User has only one
level of
association with a Project.
I was thinking HABTM, but I don't see how to get my desired
'[email protected]' result from that.
Any helpful comment would be greatly appreciated.
Thanks,
Lille
--
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.
--
-------------------------------------------------------------
visit my blog athttp://jimlabs.heroku.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 rubyonrails-
[email protected].
To unsubscribe from this group, send email to
[email protected]
.
For more options, visit this group
athttp://groups.google.com/group/rubyonrails-talk?hl=en
.
--
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 rubyonrails-
[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
.
--
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.