Подобную математику вообще опасно делать, потому что вы не можете гарантировать, что она существует. Например, предположим, что у вас есть записи с идентификаторами 1, 2 и 3, затем вы удаляете запись 3, но создаете новую запись, ActiveRecord назначит ей значение 4 (даже если 3 больше не является записью. Поэтому, если вы должны были сделать найти (self.id + 1) в записи 2, вы получите ошибку.
Самый простой способ сделать это, вероятно, с помощью оператора 'where'.
def next(lang='eng')
BlogEntry.where(:lang => lang).where("id > ?", self.id).first
end
и
def prev(lang='eng')
BlogEntry.where(:lang => lang).where("id < ?", self.id).last
end
Я не знаком с синтаксисом используемой вами версии Rails, но, вероятно, он очень похож, если не совпадает.