@Dheeraj if you need two associations to the same model with different
scopes, you could just create another association for each one that is
needed, e.g.
class Post
has_many :comments, -> { visible }
has_many :unscoped_comments, class_name: 'Comment'
end
However, I wouldn't rely on having multiple associations with different
scopes, etc. too much. Going beyond scoping, lets consider the
association's "include" option. Let's say that you use include in the
association to help avoid n+1 queries that you are seeing. You do this
because the show method is loading associations. But when you add that, you
forget that index didn't need those associations. This could significantly
increase time to perform an index action. So, in the "lets just add a new
association" mentality, you try to have one association that uses include
and one that doesn't- except that won't work, because either the
association is eagerly included or it isn't. So, instead of using include
on the association in the model, you end up with Comment.all for the index
method and Comment.where(...).includes(...).first in the show method. Why
not leave as much as you can in the controller that relates to those
queries in the individual action methods from the beginning?
On Monday, June 3, 2013 11:01:55 AM UTC-4, Dheeraj Kumar wrote:
>
> @Jon Leighton
>
> Can that scope be removed later? Can I retrieve all comments, including
> hidden ones?
>
> --
> Dheeraj Kumar
>
> On Monday 3 June 2013 at 5:33 PM, Jon Leighton wrote:
>
> In Rails 4 you should be able to do:
>
> class Post
> has_many :comments, -> { visible }
> end
>
> On 21/05/13 23:41, Caleb Thompson wrote:
>
> I'm considering implementing a feature by which a collection
> association might limit the results.
>
> By default, a collection association returns all values where the
> foreign key on the `belongs_to` or `has_and_belongs_to` model matches
> the parent object's primary key. These results can be filtered using the
> `conditions` option, but that requires that other models have knowledge
> of the parent model's table structure.
>
> The feature I'm proposing is to add a `scope` option to collection
> associations which takes a symbol representing a scope (or class mehtod)
> defined on the associated model class.
>
> A basic example would look like this:
>
> class Comment
> belongs_to :post
>
> def self.visible
> where(deleted_at: nil)
> end
> end
>
> class Post
> has_many :posts, scope: :visible
> end
>
> In the above example, `post.comments` would return `Comment` instances
> whose `post_id = post.id` and whose `deleted_at = NULL`, providing basic
> soft-deletion functionality.
>
> While the same effect could be achieved with a declaration such as
> `has_many :posts, conditions: ['deleted_at = ?', nil]`, that betrays
> knowledge of the implementation of deletion on `Post` and would break if
> the implementation were changed to a boolean value for deletion rather
> than a timestamp field.
>
> If I were to work on adding this functionality into ActiveRecord, is it
> something that core might entertain merging?
>
> Thank you,
>
> Caleb Thompson
>
> --
> You received this message because you are subscribed to the Google
> Groups "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected] <javascript:>.
> To post to this group, send email to [email protected]<javascript:>
> .
> Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected] <javascript:>.
> To post to this group, send email to [email protected]<javascript:>
> .
> Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.