I’ve used Postgres arrays as custom associations before; I’d be willing to help 
with this, though I don’t have a ton of experience with the ActiveRecord 
codebase.

> On Aug 24, 2017, at 6:31 PM, Michael Giovinco <aegiswi...@gmail.com> wrote:
> 
> The subject line is probably a little confusing, so here is an example.
> 
> Let's say you have a "person" model that inherits from ActiveRecord::Base.
> 
> That person has a list of "sports" that they like and "sport" is also a model 
> inheriting from ActiveRecord::Base.
> 
> Now, since there are many people and many sports, this is a many-to-many 
> relation and you could model it as a join table linking "person" and "sport" 
> using a has_many_through relation.
> 
> But what I would like to do, is to have an array of "sport_ids" on the 
> "person" object. Each id would refer to a "sport", and you also get ordering, 
> say if you want the first "sport_id" to point to the person's favorite sport. 
> 
> I know you can do this, by you have to do all the work yourself. 
> 
> For example, if you wanted to get the sports for a person, you would write a 
> function on "Person" like:
> 
> def sports
>   Sport.where(id: sport_ids)
> end
> 
> 
> 
> Then you can do:
> 
> person.sports
> 
> 
> and get an array of sport objects. The problem is you will lose the ordering 
> of the array here, which might be something you care about. You can try and 
> do a fancy order clause to keep the array ordering but it is a little bit 
> messy.
> 
> But the other problem is that this is inefficient. Say you wanted to get all 
> children and what sports they like. You can't do something like:
> 
> Person.includes(:sports).where("age < 18")
> 
> 
> 
> You end up with an n+1 query problem because you are stuck doing something 
> like:
> 
> children = Person.where("age < 18")
> children.each do |child|
>   child.sports 
> ...
> 
> Furthermore, it would great to be able to do things like this:
> 
> person.sports << hockey
> person.sports[2] = baseball
> 
> 
> Anyways, has anyone considered adding a feature like this to ActiveRecord? If 
> not, I'm going to work on this because it would be very useful for a couple 
> of projects that I am working. I'd greatly appreciate if someone could point 
> me in the right direction to get more acquainted with the ActiveRecord 
> codebase. 
> 
> Thanks.
> 
> -- 
> 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 
> <mailto:rubyonrails-core+unsubscr...@googlegroups.com>.
> To post to this group, send email to rubyonrails-core@googlegroups.com 
> <mailto:rubyonrails-core@googlegroups.com>.
> Visit this group at https://groups.google.com/group/rubyonrails-core 
> <https://groups.google.com/group/rubyonrails-core>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
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 post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to