Возможно ли обновить свойство в DataMapper, если для параметра :key
установлено значение true?Обновление набора свойств в качестве ключа в DataMapper
Скажем, к примеру, у меня есть модель настроить так:
class Post
include DataMapper::Resource
property :slug, Text, :unique => true, :key => true
# ...
end
и я сделал новый экземпляр этого с :slug => "example-post-title"
.
Я пытался обновить его путем доступа к хранимой
@post = Post.get("example-post-title")
#=> #<Post @slug="example-post-title" ...>
@post.slug = "example-post-title-2"
#=> "example-post-title-2"
@post.save
#=> true
@post = Post.get("example-post-title-2")
#=> nil
, но как вы можете видеть слизняк не обновлялся. Я также попытался с помощью Post#update
метода:
@post = Post.get("example-post-title")
#=> #<Post @slug="example-post-title" ...>
@post.update(:slug => "example-post-title-2")
#=> true
@post = Post.get("example-post-title-2")
#=> nil
Looking в базе данных, то индекс столбец не изменяется ни одним из этих примеров. Остается example-post-title
, а не example-post-title-2
.
В соответствии с документами метод Post#update
, аналогичный методу Post#save
, должен возвращать значение true, если операция прошла успешно, а false, если это не так. Здесь он возвращается true
, но на самом деле он не обновляет запись.
Я искал и искал и ничего не нашел об этом в Интернете. Ни StackOverflow, ни DataMapper rdoc не имели ничего об обновлении ключа.
Я знаю, что я могу иметь уникальное свойство Serial
и просто получить экземпляры Post
используя слизняка (как, сделать Serial
свойства клавиши вместо сгустка), но я ищу способ сделать это без этого, если это вообще возможно.