Вы можете использовать обратный вызов before_add:
has_many :followers,
:through => :whatever,
:before_add => Proc.new { |user, follower|
raise "Duplicate follower" if user.followers.include?(follower)
}
Если вы просто пытаетесь игнорировать дубликаты, вы можете использовать опцию: uniq:
has_many :followers,
:through => :whatever,
:uniq => true
(модель соединениятаблица будет содержать дубликаты, но они будут игнорироваться).