El Wednesday 25 March 2009 18:56:50 Wes Gamble escribió:
> Wes Gamble wrote:
> > Wes Gamble wrote:
> >> Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
> >>
> >> wrote:
> >>> El Wednesday 25 March 2009 15:33:14 Wes Gamble escribió:
> >>>> Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
> >>>>
> >>>> wrote:
> >>>>> El Sunday 22 March 2009 08:17:18 Wes Gamble escribió:
> >>>>>
> >>>>> I have a fairly complex custom find call that I need to do in some
> >>>>> instances for an AS index view.  conditions_for_collection will only
> >>>>> handle conditions, correct?  Is there any hook so that I can provide
> >>>>> other find options like :joins or :limit?
> >>>>>
> >>>>>
> >>>>> You can define an active_scaffold_joins method, like
> >>>>> active_scaffold_conditions, and you can set the limit in your
> >>>>> controller AS config:
> >>>>> config.list.per_page
> >>>>> http://wiki.github.com/activescaffold/active_scaffold/api-list
> >>>>
> >>>> Sergio,
> >>>>
> >>>> I need to do a join to a HABTM association table - currently I'm doing
> >>>> it as a subquery via conditions_for_collection, as in:
> >>>>
> >>>> "id IN (SELECT medical_facility_id FROM
> >>>> medical_facilities_medical_facility_categories WHERE
> >>>> medical_facility_category_id = #...@medical_facility_category_id})" if
> >>>> @medical_facility_category_id
> >>>>
> >>>> How would I write the active_scaffold_joins (or looks like I should
> >>>> use active_scaffold_habtm_joins) to handle this case?
> >>>
> >>> Sorry, I was wrong.
> >>> conditions_for_collection is for set :conditions option of rails find.
> >>> joins_for_collection is for set :joins option of ActiveRecord's find
> >>> method.
> >>>
> >>> Do you know build the sql with ActiveRecord's find method?
> >>> MedicalFacility.find :all, :joins => :medical_facility_categories,
> >>> :conditions => ['medical_facility_categories.id = ?',
> >>> @medical_facility_category_id]
> >>>
> >>> So you define these methods:
> >>> def conditions_for_collection
> >>>   ['medical_facility_categories.id = ?', @medical_facility_category_id]
> >>> end
> >>>
> >>> def joins_for_collection
> >>>   [:medical_facility_categories]
> >>> end
> >>
> >> This is weird.  The call to "joins_for_finder" (which calls
> >> joins_for_collection) is failing.  I've puts'ed it to death to see
> >> what's happening.  Even though the class of my "joins_for_collection"
> >> method is reported as Array, Array is NOT matching on the case
> >> statement, and it is dropping into the else. WTF?
> >>
> >> def joins_for_finder
> >>       puts joins_for_collection.class
> >>
> >>       case joins_for_collection.class
> >>       when String
> >>         [ joins_for_collection ]
> >>       when Array
> >>         puts joins_for_collection.inspect
> >>         joins_for_collection
> >>       else
> >>         puts "HERE: #{joins_for_collection.class}"
> >>         []
> >>       end + active_scaffold_habtm_joins
> >>     end
> >>
> >> Output:
> >> Array
> >> HERE: Array
> >
> > Sure enough, joins_for_collection.class === Array returns false,
> > although joins_for_collection.class == Array returns true.
> >
> > This looks like a bug to me, and now I wonder if joins_for_collection
> > ever worked.  Same behavior occurs if a String is returned from
> > joins_for_collection.
>
> This works:
>
>    def joins_for_finder
>       case joins_for_collection.class.to_s
>       when 'String'
>         [ joins_for_collection ]
>       when 'Array'
>         joins_for_collection
>       else
>         []
>       end + active_scaffold_habtm_joins
>     end
>
> It makes sense that the "===" doesn't work between classes since it is
> defined thusly:
>
> "Ruby classes are instances of class Class, which defines === to test if
> the argument
> is an instance of the class or one of its superclasses."
>
> Since a class is not an instance of anything, === will never work in
> this case.
>
> I'm on the 2.1 branch - maybe this has been fixed in edge AS?

Fixed in rails 2.1, 2.2 and edge

-- 
Sergio Cambra .:: entreCables S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ActiveScaffold : Ruby on Rails plugin" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/activescaffold?hl=en
-~----------~----~----~----~------~----~------~--~---

  • co... Wes Gamble
    • ... Kenny Ortmann
      • ... Kenny Ortmann
      • ... Wes Gamble
    • ... Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
      • ... Wes Gamble
        • ... Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
          • ... Wes Gamble
            • ... Wes Gamble
              • ... Wes Gamble
                • ... Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
                • ... Mukund
                • ... Wes Gamble
                • ... Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
                • ... Wes Gamble
        • ... rbarton

Reply via email to