更新 属性 集作为 DataMapper 中的键
Updating a property set as the key in 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
但是如您所见,该 slug 从未更新过。我也尝试使用 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
在数据库中查看,这些示例中的任何一个都没有更改索引列。它仍然是 example-post-title
而不是 example-post-title-2
.
根据文档,Post#update
方法与 Post#save
方法类似,如果操作成功,应该 return 为真,否则为假。它在这里 returning true
,但实际上并没有更新记录。
我在网上找了又找,也找不到任何关于它的资料。 Whosebug 和 DataMapper rdoc 都没有关于更新密钥的任何内容。
我知道我可以有一个独特的 Serial
属性 并使用 slug 获取 Post
的实例(例如,使 Serial
属性 键而不是 slug),但如果可能的话,我正在寻找一种没有它的方法。
我的预感是您无法更新密钥。根据文档,它们受到保护以防止批量分配:
Natural Keys are protected against mass-assignment, so their setter= will need to be called individually if you're looking to set them.
他们不谈论更新它们,但通常在 "key => value" 商店中更新密钥是不可能的或被弃用的。我假设这里也是这种情况,即使我找不到任何确凿的证据给你:/
如果 :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
但是如您所见,该 slug 从未更新过。我也尝试使用 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
在数据库中查看,这些示例中的任何一个都没有更改索引列。它仍然是 example-post-title
而不是 example-post-title-2
.
根据文档,Post#update
方法与 Post#save
方法类似,如果操作成功,应该 return 为真,否则为假。它在这里 returning true
,但实际上并没有更新记录。
我在网上找了又找,也找不到任何关于它的资料。 Whosebug 和 DataMapper rdoc 都没有关于更新密钥的任何内容。
我知道我可以有一个独特的 Serial
属性 并使用 slug 获取 Post
的实例(例如,使 Serial
属性 键而不是 slug),但如果可能的话,我正在寻找一种没有它的方法。
我的预感是您无法更新密钥。根据文档,它们受到保护以防止批量分配:
Natural Keys are protected against mass-assignment, so their setter= will need to be called individually if you're looking to set them.
他们不谈论更新它们,但通常在 "key => value" 商店中更新密钥是不可能的或被弃用的。我假设这里也是这种情况,即使我找不到任何确凿的证据给你:/