summaryrefslogtreecommitdiff
path: root/_posts/2011-12-09-same-class-associations-in-rails-3.html
diff options
context:
space:
mode:
authorJosé Mota <josemota.net@gmail.com>2012-04-06 19:40:37 +0100
committerJosé Mota <josemota.net@gmail.com>2012-04-06 19:40:37 +0100
commit3204575bfcd1f12db5945c8959073d40915cfdfe (patch)
tree5b35a0896f91043c931482b5ecb99dc2aa154310 /_posts/2011-12-09-same-class-associations-in-rails-3.html
parent6644e3213758ac5f8ea4f388d4dcf4105e7d4530 (diff)
Import all posts.
Diffstat (limited to '_posts/2011-12-09-same-class-associations-in-rails-3.html')
-rw-r--r--_posts/2011-12-09-same-class-associations-in-rails-3.html31
1 files changed, 31 insertions, 0 deletions
diff --git a/_posts/2011-12-09-same-class-associations-in-rails-3.html b/_posts/2011-12-09-same-class-associations-in-rails-3.html
new file mode 100644
index 0000000..654f69d
--- /dev/null
+++ b/_posts/2011-12-09-same-class-associations-in-rails-3.html
@@ -0,0 +1,31 @@
+---
+layout: post
+title: Same class associations in Rails 3
+tags:
+- Development
+status: publish
+type: post
+published: true
+meta:
+ _edit_last: '1'
+ _cws_is_markdown: '1'
+---
+<strong>[TL;DR]</strong> Even though the selected events conceptually belong to a record, the latter has the foreign keys to former. So technically, <code>has_one</code> is to be changed to <code>belongs_to</code>.
+
+<hr />
+
+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.
+
+<h3>Context</h3>
+
+In this app I'm building, I have <em>Students</em> that have a <em>Record</em> per year. Each record has several <em>Events</em>. These records also have two specific events: a <em>test</em> and an <em>audition</em>, registered in the schema as <code>id</code>'s in the record's table.
+
+<h3>So what did technically happen?</h3>
+
+I wasn't able to access those specific events through the associations specified in the model. Given <code>r = Record.first</code>, when I tried to access the audition, by using <code>r.test</code>, Rails would use a SQL query that would correspond to <code>r.events.first</code> instead.
+
+After acknowledging that, I turned to <a href="http://twitter.com/varandas">@varandas</a> 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 <code>has_one</code> to <code>belongs_to</code> (thanks <a href="http://github.com/drogus">@drogus</a>!). The reason for that is the foreign key is on the <code>records</code> table. From the framework's perspective, it looks like the record actually <em>belongs to</em> the event, when in practice it's not.
+
+<h3>Code sample</h3>
+
+[gist id=1449428]