Forum: Ruby on Rails has_many :through selections based on attributes of the :through table.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bbf55d9960b9905e57621d5da6727b2d?d=identicon&s=25 Neal L (Guest)
on 2008-10-07 17:56
(Received via mailing list)
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!
C64e63b70be7dfed8b0742540b8b27e5?d=identicon&s=25 Mark James (Guest)
on 2008-10-07 21:31
(Received via mailing list)
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
This topic is locked and can not be replied to.