2015-08-31 1 views
3

Возможно ли обновить свойство в 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 свойства клавиши вместо сгустка), но я ищу способ сделать это без этого, если это вообще возможно.

ответ

2

Моя догадка заключается в том, что вы не можете обновить ключ. Согласно документу, они защищены от массового присвоения:

Натуральные ключи защищены от массового присвоения, поэтому их установщик = нужно будет называть индивидуально, если вы хотите их установить.

Они не говорят об их обновлении, но, как правило, в хранилищах «key => value» невозможно или устарело, чтобы обновить ключ. Я бы предположил, что это так и есть, хотя я не могу найти никаких убедительных доказательств, чтобы дать вам:/