per rispondere alla mia stessa domanda:dopo alcune ricerche ho scoperto che rails (activerecord) ha bisogno di campi id sulle tabelle che sono mappate sui modelli. se usi le linktable non sono necessarie, ma per le tabelle a cui vuoi rivolgerti come modelli, lo sono. nel mio caso la soluzione era aggiungere
set_primary_key :cal_id
dove cal_id è la mia chiave univoca.