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