Yeah, you're right. Makes perfect sense.

I really like the approach.

On May 22, 2013, at 1:13 AM, Caleb Thompson <[email protected]> wrote:

> I don't think that multiple scopes would add any real value. Scopes can 
> themselves be chains of scopes:
> 
>     def recent
>       visible.where('created_at >= ?' Time.now)
>     end
> 
> On Tuesday, May 21, 2013 8:03:21 PM UTC-4, Zamith wrote:
> Love the idea!
> 
> It clearly separates the concerns of the two models.
> 
> One thing though, would it be interesting for the scope to take and array of 
> scopes?
> 
> 
> On May 21, 2013, at 11:41 PM, Caleb Thompson <[email protected]> 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].
>> 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.
>>  
>>  
> 
> Cumprimentos,
> Luís Ferreira
> 
> 
> 
> 
> -- 
> 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.
>  
>  

Cumprimentos,
Luís Ferreira



-- 
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.


Reply via email to