Maybe the clearer way to apply it would be to allow unscoping via the merge
method?

I think the overall idea is worth pursuing in some fashion. We often have
big queries with lots of joins on aggregate dashboards, and ordering on
default scopes for joined models adds wasted expense to queries. The
workarounds are either no default scopes for ordering or joins via SQL
string, which can be inconvenient for a number of reasons.

On Sat, Feb 29, 2020, 5:07 PM Slava Korolev <koro...@gmail.com> wrote:

> Thank you for your feedback!
>
> I think you might misunderstand what I'm proposing, sorry for that.
> You still can unscope as you did before, but if you want to specify table
> you want to affect, you can do it.
> In your example, the current implementation also doesn't work:
>
> Article.where("deleted_at IS NULL").unscope(where: :deleted_at) # ==
> SELECT * FROM "articles" WHERE (deleted_at is NULL)
>
> I don't see a way to fix this existing problem.
> But if you don't use custom SQL in your queries you can use both old and
> new approaches:
>
> Article.where(deleted_at: nil).unscope(where: :deleted_at) # == SELECT *
> FROM "articles"
> Article.where(deleted_at: nil).unscope(where: { articles: :deleted_at }) #
> == SELECT * FROM "articles"
>
>
> On Saturday, February 29, 2020 at 4:25:08 PM UTC+1, James Coleman wrote:
>>
>> I think this will likely be confusing in many cases, since it's trivial
>> to come up with example where it won't be able to work as expected.
>>
>> For example, suppose that someone does Article.where("deleted_at IS
>> NULL") in some method (or even harder to find: in a library), then the
>> result of that has unscope(where: {articles: :deleted_at}) called on it. In
>> that case the unscope call will be a no-op, and the result not only
>> surprising, but likely to cause significant application bugs.
>>
>> As such, I'm -1 on this change.
>>
>> On Sat, Feb 29, 2020 at 1:00 AM Slava Korolev <kor...@gmail.com> wrote:
>>
>>> I often see a use case when in a query, there are several relations with
>>> attributes with the same names(for example, in our codebase, there are
>>> several "soft-deletable" entities, and all of them have deleted_at
>>>  attribute).
>>>
>>> Article.where(deleted_at: nil).joins(:comments).where(comments: { 
>>> deleted_at: nil })
>>>
>>> At the moment, it's not possible to unscope deleted_at only for
>>> articles or only for comments.
>>>
>>> I created a PR that adds support for specifying tables in where clauses
>>> in unscope method:
>>>
>>> Article.where(deleted_at: nil).joins(:comments).where(comments: { 
>>> deleted_at: nil }).unscope(where: { articles: :deleted_at })
>>>   # == Article.joins(:comments).where(comments: { deleted_at: nil })
>>>
>>>
>>> PR: https://github.com/rails/rails/pull/38608
>>>
>>> Happy to get any feedback, thanks!
>>>
>>> --
>>> 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 rubyonra...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/rubyonrails-core/e5117870-9340-4d86-b81c-0ae75840d486%40googlegroups.com
>>> <https://groups.google.com/d/msgid/rubyonrails-core/e5117870-9340-4d86-b81c-0ae75840d486%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> 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 rubyonrails-core+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rubyonrails-core/c044aa68-7fac-4eb6-bb35-93c0cd69e9c6%40googlegroups.com
> <https://groups.google.com/d/msgid/rubyonrails-core/c044aa68-7fac-4eb6-bb35-93c0cd69e9c6%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 rubyonrails-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-core/CAG2BGjqXi%2BQ6m3X03U_qyKAq8LVgNxaGM4Bfnx%3DPiN0Jw9BUsg%40mail.gmail.com.

Reply via email to