has_one through belongs_to

Hi.

My model data is the following:

  • Place

  • User

  • Checkin

Instead of having a Checkin that belongs to both User and Place, I chose to add another model, Program, that allows to list all the places a user can checkin into, and also hide the checkins he’s no longer involved in (= the user sign out of a specific program).

That give me crazy relationships:

Program has_many Checkin (and a double belongs_to Place and User)

Checkin belongs_to Program

User has_many Program

Place has_many Program

Place has_many Checkin through Program

In order to access a place or a user from a checkin, I do a has_one through (program): Checkin has_one User through Program. It allows me to have clean ActiveRecord relationships.

But I don’t know if it is the most suitable, and if has_one is made for this (apparently not really).