2011-05-12 54 views
3

这里是一个简单的模型。Mongoid update_attributes没有得到保存

class Event 
    include Mongoid::Document 

    field :name, type: String 
    field :schedule, type: String 
    field :description, type: String 
    field :active, type: Boolean, default: true 
    key :name 

end 

1.我们创建和事件

ruby-1.9.2-p0 > event = Event.new(:name => "event1") 
=> #<Event _id: event1, _type: nil, _id: "event1", name: "event1", schedule: nil, description: nil, active: true> 
ruby-1.9.2-p0 > event.save! 
=> true 

2.Know可以找到事件

ruby-1.9.2-p0 > event = Event.find("event1") 
=> #<Event _id: event1, _type: nil, _id: "event1", name: "event1", schedule: nil, description: nil, active: true> 

3.So更新事件属性

ruby-1.9.2-p0 > event.update_attributes!(:name => "new name") 
=> true 

4.Lets尝试找到事件

ruby-1.9.2-p0 > event = Event.find("new name") 
Mongoid::Errors::DocumentNotFound: Document not found for class Event with id(s) new name. 

5.Ooops没有找到,但旧的一人仍然坚持

ruby-1.9.2-p0 > event = Event.find("event1") 
=> #<Event _id: event1, _type: nil, _id: "event1", name: "event1", schedule: nil, description: nil, active: true> 


我做错了吗?我希望这不是一个错误。

回答

3

我不相信MongoDB中,您可以改变一个_id场。当我尝试使用标准蒙戈外壳,我得到这个错误(这意味着它不是一个Mongoid限制,它在实际蒙戈软件的限制):

Mod on _id not allowed 

每当你需要改变name领域,你”您可能需要:

  1. 将它复制到一个新的记录与新的名称。
  2. 删除旧的记录
+0

是的坏没有在文档,我决定让这个,我只是检查是否关键是得到更新,如果是复制文件,更改密钥,保存新doc和删除旧的,这样用户得到正是他想要的东西。 – daniel 2011-05-12 03:53:26