Hi Tim,

I am 95% sure that you are fixing an important bug there! Good work!

I just ran the tests with your fix and everything is green. Please open
a pull request whenever you have a moment and I'll be happy to merge it.

Warm regards,
Ignacio

El 13-06-2015 a las 05:08, Tim Griffin escribió:
> Well, by changing apply_scopes to be this:
> 
>         def apply_scopes(scopes)
>           binding.pry
>           result = self
>           scopes.each_pair do |scope, arg|
>             if arg.is_a?(Array)
>               result = result.send(scope, *arg) unless arg.first.blank?
>  #query against existing result instead of self
>             else
>               result = result.send(scope, arg) unless arg.blank?
>             end
>           end
>           result
>         end
> 
> I get the query I was expecting:
> 
> [4] crs(Entity) »  result.to_sql
> => "SELECT [entities].* FROM [entities] WHERE (entities.status =
> N'in_compliance') AND (entities.entity_type = N'cooperative')"
> 
> Hooray!
> 
> So, can anyone see a downside fixing apply_scopes as such? I'm tempted
> to submit a pull request!
> 
> Tim
> 
> 
> 
> 
> On Friday, June 12, 2015 at 6:19:28 PM UTC-4, Tim Griffin wrote:
> 
>     Yes, I can probably do it that way, but I was trying  to take
>     advantage of Hobo's built-in scopes. 
> 
>     In looking closer at HObo's /apply_scopes/ method, I see that each
>     time it iterates, it does not further refine /result/. It just keeps
>     querying the original model, /self/:
> 
>             def apply_scopes(scopes)
>               binding.pry
>               result = self
>               scopes.each_pair do |scope, arg|
>                 if arg.is_a?(Array)
>                   result = self.send(scope, *arg) unless arg.first.blank?
>                 else
>                   result = self.send(scope, arg) unless arg.blank?
>                 end
>               end
>               result
>             end
> 
>     So, that's the problem. 
> 
>     There needs to be a check that if there is already a result for the
>     next iteration of a /scope/, then apply the scope to the existing
>     result, not to "self". 
> 
>     Will tinker this a bit more, but that's my theory. 
> 
>     Tim
> 
> 
> 
>     On Thursday, June 11, 2015 at 10:26:48 PM UTC-4, Tim Griffin wrote:
> 
>         Hi all;
> 
>         Perhaps I'm missing something, but I was expecting two filter
>         parameters to become part of a query through scopes.merge! But,
>         one seems to be dropped.
> 
>         From an index page, I have two filter combos that will form a
>         query such as this:
> 
>         http://localhost:3000/admin/entities
>         
> <http://localhost:3000/admin/entities>?status=active&entity_type=corporation
> 
>         In my #index controller method, I have
> 
>             scopes = {                                                  
>                     
>               search: [params[:search], :fileno, :name], 
>               order_by: parse_sort_param(:id, :fileno, :name)
>             }
>             scopes.merge!(status_is: params[:status])
>             scopes.merge!(entity_type_is: params[:entity_type])
> 
>         But, the resulting query that gets fed to PostgreSQL is this:
> 
>         [INFO ] GET    
>         "/admin/entities?status=active&entity_type=corporation"  for
>         127.0.0.1  at 2015-06-11 22:20:19 -0400
>         [DEBUG]   SQL (0.6ms)  USE [YCOR_DEV]
>         [INFO ] === Processing by Admin::EntitiesController#index as HTML
>         [INFO ]   Parameters: {"status"=>"active",
>         "entity_type"=>"corporation"}
>         DEBUG]   Entity Load (7701.7ms)  EXEC sp_executesql N'SELECT TOP
>         (50) [__rnt].* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY fileno
>         DESC) AS [__rn], [entities].* FROM [entities] WHERE
>         (entities.entity_type = N''corporation'')) AS [__rnt] WHERE
>         [__rnt].[__rn] > (0) ORDER BY [__rnt].[__rn] ASC'
> 
> 
>         There's no sign of the /status/ parameter. 
> 
>         Am I missing something basic here? 
> 
>         Thanks,
>         Tim
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Hobo Users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/hobousers.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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/hobousers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to