Scopes for Associations
https://github.com/ordinaryzelig/scopes_for_associations
Description
Define very basic, commonly used scopes for ActiveRecord associations.
Description through code
class Movie < ActiveRecord::Base
belongs_to :director
scopes_for_associations
end
Movie.for_director_id(Director.first.id)
#=> [#<Movie ..., director_id: 1>]
Movie.for_director(Director.first)
#=> [#<Movie ..., director_id: 1>]
Movie.for(Director.first)
#=> [#<Movie ..., director_id: 1>]
Supported association types
- belongs_to (non-polymorpic and polymorphic)
If you're like me and prefer learning through looking at code, read through the specs. The examples here are basically reproductions of the tests.
belongs_to (non-polymorphic)
class Movie < ActiveRecord::Base
belongs_to :director
scopes_for_associations
end
Movie.for_director_id(Director.first.id)
#=> [#<Movie ..., director_id: 1>]
Movie.for_director(Director.first)
#=> [#<Movie ..., director_id: 1>]
Movie.for(Director.first)
#=> [#<Movie ..., director_id: 1>]
belongs_to (polymorphic)
class Movie < ActiveRecord::base
# It is important to define this association.
has_many :comments, :as => :commentable
end
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
Comment.for_commentable_id(Movie.first.id)
#=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>]
Comment.for_commentable_type('Movie')
#=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>, ...]
Comment.for_commentable(movie)
#=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>]
Comment.for(Movie.first)
#=> [#<Comment ..., commentable_type: "Movie", commentable_id: 1>]
Compatibility
Tested with ActiveRecord >=3.0.0