cheers, i made it a bit more clear and posted it in rails core
On Mar 16, 9:26 pm, "\"Wolas!\"" <[email protected]> wrote:
> i would post it in the rails core group.
>
> On Mar 15, 6:12 am, Zyclops <[email protected]> wrote:
>
> > I'm not satisfied with how rails currently handles finds accross
> > active record models, and want to see if there's a waywe can improve
> > it.
>
> > The ability to generate dynamic search criteria from forms that search
> > accross models can be quite difficult except in the simplest cases.
> > The main cause of this is because as a developer you have to work out
> > what the table name is going to be called before you are able to use
> > it.
>
> > Here is an example:
>
> > class Person < ActiveRecord::Base
>
> > # Everybody has a home address
> > belongs_to :home_address,
> > :class_name => 'Address',
> > :foreign_key => 'home_address_id'
>
> > # Only some people have a work address
> > belongs_to :work_address,
> > :class_name => 'Address',
> > :foreign_key => 'work_address_id'
> > end
>
> > class Address < ActiveRecord::Base
> > end
>
> > Lets say we have a search panel, that allows you to filter on home
> > address street name, and work address street name and the user may or
> > may not use these search options.
>
> > # A search for the home address 22
> > Person.find(:all, :joins =>
> > [:home_address, :work_address], :conditions => {:address =>
> > {:street_no => 22}})
>
> > # A search for the work address 22
> > Person.find(:all, :joins =>
> > [:work_address, :home_address], :conditions => {:address =>
> > {:street_no => 22}})
> > #Notice that the order of the joins affects what the conditions hash
> > applies too. I believe this unintuitive.
>
> > # I think a better system would be to use the names of the
> > relationships to dictate the search criteria
> > # This would stop the user having to guess what the join table is
> > called.
>
> > Person.find(:all, :joins =>
> > [:work_address, :home_address], :conditions => {:home_address =>
> > {:street_no => 22}})
>
> > # If this could be developed I would think we'd need to cover these
> > cases:
> > # 1. Eager loading using inner join
> > Person.find(:all, :joins =>
> > [:work_address, :home_address], :conditions => {:home_address =>
> > {:street_no => 22}})
>
> > # 2. Eager loading using left join
> > # Notice that the home_address has conditions specified so in this
> > case we might want to enforce a left join
> > Person.find(:all, :include =>
> > [:work_address, :home_address], :conditions => {:home_address =>
> > {:street_no => 22}})
>
> > # 3.No eager loading specified (would we force a join because of the
> > conditions specified?)
> > Person.find(:all, :conditions => {:home_address => {:street_no =>
> > 22}})
>
> > # 4. Custom SQL for each nesting, so that you can use any sql but not
> > have to explicitly know the name of the table
> > Person.find(
> > :all,
> > :joins => :home_address
> > :conditions => [
> > {:age => 22},
> > # This would currently conflict with the currect nested hash
> > since
> > {:home_address => ['home_address.street_name LIKE ?', 'Dougla%']}
> > ]
> > )
>
> > # 1. Joins
> > # SELECT *
> > # FROM people
> > # JOIN addresses home_address ON (people.home_address_id =
> > home_address.id)
> > # WHERE people.age = 22 AND
> > # home_address.street_name LIKE 'Dougla%'
>
> > # 2. Left Joins (:include)
> > # SELECT *
> > # FROM people
> > # WHERE people.age = 22
> > #
> > # SELECT *
> > # FROM addresses home_address
> > # WHERE home_address.street_name LIKE 'Dougla%'
> > # AND home_address.id IN (1,2,3,4,5,6,7,8,9,10)
>
> > I'd like to hear your thoughts and ideas on any inherent problems with
> > getting this implemented, or design improvements.
>
> > It's only an idea at this stage, but I'd like to develop it so that
> > developing complex dynamic searches using rails
> > becomes trivial.
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" 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/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---