# Has\_many :through selections based on attributes of the :through table

**URL:** <https://www.ruby-forum.com/t/has-many-through-selections-based-on-attributes-of-the-through-table/150354>\
**Category:** Rails\
**Created:** [October 7, 2008, 5:56pm UTC](https://www.ruby-forum.com/t/has-many-through-selections-based-on-attributes-of-the-through-table/150354 "2008-10-07T17:56:11Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Neal\_L](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Neal\_L](https://www.ruby-forum.com/u/Neal_L)\
**Post date:** [October 7, 2008, 5:56pm UTC](https://www.ruby-forum.com/t/has-many-through-selections-based-on-attributes-of-the-through-table/150354/1 "2008-10-07T17:56:11Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![Neal\_L](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Neal\_L](https://www.ruby-forum.com/u/Neal_L)\
**Post date:** [October 7, 2008, 9:31pm UTC](https://www.ruby-forum.com/t/has-many-through-selections-based-on-attributes-of-the-through-table/150354/2 "2008-10-07T21:31:48Z")

</div>

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](http://railswheels.com)
