Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

Dynamic scopes and dynamic finders for belongs_to

#668

This patch consists of two changes:

1. the dynamic finders now accept belongs_to attributes.

2. attributes that can be used via a dynamic finder can also be directly accessed as scopes.

Example usages include:

  comments = Comment.find_by_creator(current_user)

  comments = Comment.creator(current_user).commentable(post).all

  posts = Post.creator(current_user).published.my_named_scope.last

  cases = Case.status("OPEN").priority("HIGH").my_named_scope.all

The main advantage of this patch is that it allows easy formation of dynamic queries based on input, without needing to explicitly define named scoped in your models. For example:

  scope = Comment.scoped({:include => [:creator, :commentable]})
  scope = scope.commentable(post) if post
  scope = scope.university(params[:uni]) if params[:uni]
  scope = scope.creator(current_user) if params[:created_by_me] == "1"
  scope = scope.country(params[:country]) if params[:country]
  @comments = scope.all

Reported by Lawrence Pit · July 21st, 2008 @ 09:43 AM

State: stale
Milestone: 2.x
Assigned to: Michael Koziarski Michael Koziarski
Importance: Low

Activity

  1. Pratik
    Pratik
    • Assigned user set to Michael Koziarski

    July 21st, 2008 @ 02:37 PM

  2. Ryan Bates
    Ryan Bates

    I think it's preferable to go through the has_many association whenever possible. So you could do this in the first example.

    comments = current_user.comments
    

    But for cases where you need to search on multiple belongs_to associations then I could see this being really useful.

    July 21st, 2008 @ 03:47 PM

  3. Tom Locke
    Tom Locke

    This seems to be a bit at risk of name clashes, the following slight change might help and is perhaps more readable:

    Comment.creator_is(current_user)
    

    Then you can also have the negative form, e.g.:

    my_post.comments.creator_is_not(some_user)
    

    I also have an implementation of these and many more which I'm intending to release as a plugin.

    July 21st, 2008 @ 06:12 PM

  4. josh
    josh
    • State changed from new to stale

    Staling out, please reopen if this is still a problem.

    October 28th, 2008 @ 04:29 PM

  5. Ryan Bigg
    Ryan Bigg
    • Tag cleared.
    • Importance changed from to Low

    Automatic cleanup of spam.

    October 9th, 2010 @ 10:04 PM

  6. Ryan Bigg
    Ryan Bigg

    Automatic cleanup of spam.

    October 21st, 2010 @ 03:36 AM

  7. bingbing