【问题标题】:CouchRest Model use a custom value instead of guid for _id fieldCouchRest 模型使用自定义值而不是 _id 字段的 guid
【发布时间】:2011-09-23 20:39:11
【问题描述】:

我想知道是否有一种方法可以使用自定义字符串值(例如对象的名称)作为 _id 字段而不是 CouchRest 模型中的 guid。

例如

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

默认情况下,它将使用 guid 作为 _id 字段。但我只想使用 name 属性作为 _id。

【问题讨论】:

    标签: ruby-on-rails rails-models couchrest


    【解决方案1】:

    你可以尝试如下使用 unique_id

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

    unique_id 将在文档第一次保存之前调用任何方法,并将其指定为文档的 _id。但是,您将拥有一个同时设置了 _id 和 name 字段的 Cat 文档。如果更改名称,它们甚至可能会不同步。

    一个可能更好的选择是创建一个 getter 和 setter 来简单地改变文档的 _id 属性

    class Cat < CouchRest::Model::Base
      def name
        self['_id']
      end
    
      def name=(value)
        self['_id']=value
      end
    end
    

    由于在这种情况下没有额外的属性,因此 name 将始终返回文档的 id。但是,一旦写入文档,将无法更改名称,因为重新分配 _id 将无效。

    更多信息: Here 是 unique_id 的 rdoc。 您还可以查看沙发休息模型的 wiki 条目以获取 validations

    【讨论】:

    • 感谢您的建议!我喜欢它,并会尝试一下。重命名操作实际上必须删除旧文档并重新创建一个新文档,因为我不知道在 CouchDB 中重命名 _id 操作。
    • 谢谢,你是对的,似乎无法通过重新分配_id来重命名。刚刚编辑了我的回复。
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多