2

我是 Rails 开发的新手,我也开始使用 MongoDB。

我一直在关注这个关于 Rails 复杂表单的Railscast教程,但我使用 MongoDB 作为我的数据库。我在插入带有子项的文档并将数据检索到编辑表单时没有问题,但是当我尝试更新它时出现此错误

未定义的方法 `assert_valid_keys' for false:FalseClass

这是我的实体类

class Project 
  include MongoMapper::Document

  key :name, String, :required => true
  key :priority, Integer

  many :tasks
  after_update :save_tasks

  def task_attributes=(task_attributes)
    task_attributes.each do |attributes|
    if attributes[:id].blank?
      tasks.build(attributes)
    else
      task = tasks.detect { |t| t.id.to_s == attributes[:id].to_s }  
      task.attributes = attributes
    end
  end    
end

def save_tasks
tasks.each do |t|
  if t.should_destroy?
    t.destroy
  else
    t.save(:validate => false)
  end
end

结束结束

class Task 
include MongoMapper::EmbeddedDocument

key :project_id, ObjectId
key :name, String
key :description, String
key :completed, Boolean

belongs_to :project
attr_accessor :should_destroy

def should_destroy?
  should_destroy.to_i == 1
end 
end

有谁知道这里发生了什么?谢谢

4

2 回答 2

2

你的任务类是什么样的?它使用 EmbeddedDocument 吗?如果没有,您是否在其中声明了 project_id 的密钥?

更新 - 这是由于save(false), dosave(:validate => false)并且你应该被设置。

于 2010-05-14T03:57:26.480 回答
0

将任务实体从 EmbeddedDocument 更改为 Document,并从 Project 中删除了 validates_associated: 任务,它现在正在更新、添加和删除更新项目中的任务。

非常感谢 x1a4 和 John Nunemaker 的帮助 :-)

于 2010-05-20T16:40:01.577 回答