José Mota — The blog

Same class associations in Rails 3

09 December 2011

  • development

[TL;DR] Even though the selected events conceptually belong to a record, the latter has the foreign keys to former. So technically, has_one is to be changed to belongs_to.


This is the first time I've ran into something like this and it was interesting to realize what it actually means when developing a business logic in Rails.

Context

In this app I'm building, I have Students that have a Record per year. Each record has several Events. These records also have two specific events: a test and an audition, registered in the schema as id's in the record's table.

So what did technically happen?

I wasn't able to access those specific events through the associations specified in the model. Given r = Record.first, when I tried to access the audition, by using r.test, Rails would use a SQL query that would correspond to r.events.first instead.

After acknowledging that, I turned to @varandas and we both thought it might be a bug in the Rails framework. Turns out it wasn't; all I had to do was switch from has_one to belongs_to (thanks @drogus!). The reason for that is the foreign key is on the records table. From the framework's perspective, it looks like the record actually belongs to the event, when in practice it's not.

Code sample

Creative Commons License

comments powered by Disqus