para responder minha própria pergunta:depois de algumas pesquisas descobri que rails (activerecord) precisa de campos de id em tabelas que são mapeadas para modelos. se você usar tabelas de links, elas não são necessárias - mas para tabelas que você deseja tratar como modelos, elas são. no meu caso a solução foi adicionar
set_primary_key :cal_id
onde cal_id é minha chave exclusiva.