Has_many :through selections based on attributes of the :through table


#1

Hi all,

I’d like to get your feedback on the easiest way to find records that
are related via has_many :through based on options in the :through
table. Suppose an Author has_many Books :through a table called
Authorships. The Authorships table is defined as:

create_table “authorships”, :force => true do |t|
t.belongs_to :author
t.belongs_to :book
t.string “role”
end

The “role” can either be “contributor” or “primary author”. The model
definitions are:

class Author < Active Record::Base
has_many :books, :through => :authorships
end

class Book < ActiveRecord::Base
has_many :authors, :through => :authorships
end

class Authorship < ActiveRecord::Base
belongs_to :author
belongs_to :book
end

So supposing I have a Book, how can I find all of the authors whose
role is defined in the :through table as “contributor”?

Similarly, if I have an author, how can I find all of the books that
the author is the “primary author” of?

Thanks!


#2

Neal L wrote:

t.string   "role"

has_many :authors, :through => :authorships
end

class Authorship < ActiveRecord::Base
belongs_to :author
belongs_to :book
end

So supposing I have a Book, how can I find all of the authors whose
role is defined in the :through table as “contributor”?

book.authors.find :all,
:conditions => {‘authorships.role’ => ‘contributor’}

Similarly, if I have an author, how can I find all of the books that
the author is the “primary author” of?

author.books.find :all,
:conditions => {‘authorships.role’ => ‘primary author’}


Rails Wheels - Find Plugins, List & Sell Plugins -
http://railswheels.com