Я бы взглянул на некоторые плагины для управления версиями, например действует как версионная или версия fu или что-то еще.
Если вы действительно хотите, чтобы это работало так, как у вас сейчас, я бы добавил логический столбец, который помечает, если это самая последняя версия. Было бы легко пробежаться и добавить это для каждого столбца и получить текущие данные. Вы можете легко обновлять его, сохраняя обратные вызовы.
Затем вы можете добавить именованную область видимости для последних в Статьях, которые проверяют логическое значение
named_scope :latest, :conditions => ["latest = ?", true]
Итак, для раздела вы можете сделать:
Section.find(params[:id]).articles.latest
Обновление:
Поскольку вы ничего не можете добавить в схему БД, я оглянулся на вашу попытку с именованной областью действия.
named_scope :last_version, lambda {|section| { :conditions => ["version IN
(SELECT MAX(version) FROM Articles
WHERE section_id = ?)", section.id] } }
Затем вы сможете сделать
section = Section.find(id)
section.articles.last_version(section)
Это не самая чистая необходимость в том, чтобы бросать раздел в лямбду, но я не думаю, что есть другой способ, так как у вас не так много доступного для вас до момента загрузки объекта, поэтому Я думаю, что ваша версия не работает.