Two relationships to same table, which way to go?


#1

Feedback here would be excellent! Below are two options for creating
a
schema where one table has two relationships to the same table in
different roles. Please let me know thoughts or any additional
options
to consider:

OPTION 1

create_table :users do |t|
t.column :name, :string
end

create_table :links do |t|
t.column :url
t.column :submitter_id, :integer
t.column :receiver_id, :integer
end

class User < ActiveRecord::Base
has_many :submitted_links, :class_name => ‘Link’, :foreign_key =>
‘submitter_id’
has_many :received_links, :class_name => ‘Link’, :foreign_key =>
‘receiver_id’
end

class Link < ActiveRecord::Base
belongs_to :submitter, :class_name => ‘User’, :foreign_key =>
‘submitter_id’
belongs_to :receiver, :class_name => ‘User’, :foreign_key =>
‘receiver_id’
end

** CONCERN: Doesn’t this break most of the automagic rails goodness?

OPTION 2

create_table :users do |t|
t.column :name, :string
end

create_table :submitters do |t|
t.column :user_id, :integer
end

create_table :receivers do |t|
t.column :user_id, :integer
end

create_table :links do |t|
t.column :url
t.column :submitter_id, :integer
t.column :receiver_id, :integer
end

class User < ActiveRecord::Base
has_one :submitter
has_one :receiver
end

class Submitter < ActiveRecord::Base
belongs_to :user
has_many :links
end

class Receiver < ActiveRecord::Base
belongs_to :user
has_many :links
end

class Link < ActiveRecord::Base
belongs_to :submitter
belongs_to :receiver
end

** I think this is logically more sound. Opinions? Any thoughts on
** the differences as far as database performance?


#2

#1.

a user can submit or receive.

they are still a user.

trying to break their role at a moment in time out into an enter new
class
seems like giant overkill.