Я создаю activerecord для моделирования дерева беседы, используя тип столбца массива, чтобы представить материализованный путь места записи в этом дереве, используя postgres 9.1, rails 4.0 и pg gem.Как получить доступ к текущему значению id в инициализаторе activerecord?
Что я действительно хочу сделать, это получить доступ к currval ('conversations_id_seq'), когда я создаю новый объект беседы, чтобы я мог передать [grandparent_id, parent_id ... current_id] в качестве массива в инициализатор объекта. Таким образом, я могу указать, что этот столбец не является нулевым, как ограничение базы данных, и в случае бесцельного разговора по умолчанию он по умолчанию [current_id].
Проблема, с которой я сталкиваюсь, - получить доступ к значению идентификатора модели, прежде чем я сохраню его в первый раз. Я всегда мог бы расслабить не нулевое ограничение и добавить крюк after_create, но он чувствует себя глупым. Я надеюсь, что есть способ, которым я могу захватить значение, которое вставляется в @id внутри инициализатора, до первого сохранения в базе данных.
EDIT, чтобы уточнить, для награды: в идеальном мире был бы специальный токен, который я мог бы передать методу создания объекта: Conversation.create (reply_chain: [: lastval]), где камень взял это mean lastval() в сгенерированном SQL.
Пустой массив путей может иметь больше смысла, чем массив реляционных массивов для корневых узлов, тогда пути становятся «parent.path + [parent.id]», и проблема последовательности исчезает. –