Модель CouchRest использует настраиваемое значение вместо guid для поля _id - PullRequest
2 голосов
/ 24 сентября 2011

Интересно, есть ли способ использовать пользовательское строковое значение (например, имя объекта) в качестве поля _id вместо guid в модели CouchRest.

Например,

class Cat < CouchRest::Model::Base
  property :name
end

По умолчанию он будет использовать guid в качестве поля _id.Но я просто хочу использовать свойство name как _id.

1 Ответ

3 голосов
/ 11 октября 2011

Вы можете попробовать использовать unique_id следующим образом

class Cat < CouchRest::Model::Base
  property :name
  unique_id :name
end

unique_id вызовет любой метод перед первым сохранением документа и назначит его как _id документа. Однако тогда у вас будут документы Cat с установленными полями _id и name. Они могут даже выйти из синхронизации, если изменить имя.

Возможно, лучшим вариантом будет создание метода получения и установки, который просто изменит атрибут _id документа

class Cat < CouchRest::Model::Base
  def name
    self['_id']
  end

  def name=(value)
    self['_id']=value
  end
end

Поскольку в этом случае нет дополнительных свойств, name всегда будет возвращать идентификатор документа. Однако после написания документа изменить имя невозможно, так как переназначение _id не будет иметь никакого эффекта.

Для получения дополнительной информации: Здесь - это rdoc для unique_id. Вы также можете проверить вики-записи моделей дивана для проверки

...