Hey Everyone.

Last year I implemented array association on my GEM exclusively for 
PostgreSQL:
https://github.com/crashtech/torque-postgresql
https://github.com/crashtech/torque-postgresql/wiki/Has-Many
https://github.com/crashtech/torque-postgresql/wiki/Belongs-to-Many

I'm planning to push this feature to Active Record, so any database that 
supports array could use.

The main steps that I took was:
1. Allow `array` setting for `has_many`
2. Identify array associations with something like 
`connected_through_array?`
3. Create a generic method that infers the correct way to connect both keys 
(primary_key and foreign_key), instead of direct use of 
`table[key].eq(foreign_table[foreign_key]`
4. Allow `cast` to be called on Some Arel Nodes
5. Make sure that `AssociationScope` rely on the above generic method to 
build the condition
6. Create the correct `BindParam` for each value on an array association
7. Create the necessary `BelongsToManyReflection`, 
`BelongsToManyAssociation`, and `Builder::BelongsToMany`
8. Adjust `AutosaveAssociation` to behave properly against array 
associations
9. A couple of other minors adjusts to make it seamless to other 
associations

The only problem so far is that it doesn't work with Polymorphic, but, it's 
so far a big win, especially for systems with `tags` and `conversations` 
(with multiple users).

I was thinking about pushing it to Rails not only because it's a cool and 
handy feature, but also because one of the problems that I faced recently 
with the GEM, where the `eq` condition is hardcoded, and that annoys me 
since it could open a door for many other customized associations. Here are 
the commit and line that got me thinking about this:
https://github.com/rails/rails/commit/54de9b1e4f5823bf22001be60efcb996ce6d260b#diff-1663e5f930ac83fef235d7e2aa5edf65R185

I want to hear people's opinions. And, if I decided to move forward, I'll 
do one step at a time, probably starting by the generic method on step #3.

-- 
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/3d033d1e-467e-41b4-8bbd-d05d32f48f2a%40googlegroups.com.

Reply via email to