Now that this is working I wish to get the code out of the association and put it in one place where I can easily reuse it across models and associations. Is this possible?
One thought that I had earlier envisaged creating a virtual attribute on the Client model called active? and putting the code in there but, this fails on two counts: 1, the presence of a ? in the method name causes problems with the SQL engine in sqlite3 ( I have not tested this on PostgreSQL); and 2, virtual attributes cannot of course be evaluated during the SQL call (although one could argue that the association finders should in fact go through the dependent class and do exactly that because this sort of logic belongs in the model directly providing the where parameters).
It seems that the tidiest solution from the standpoint of rails coding and maintenance is to simply add an column named active of type boolean to the model and set it to true or false in accordance with the values in effective_date and superseded_date, which seems a bit redundant but easier to check.