views:

427

answers:

2

I'm new to Rails development and I'm starting with MongoDB also.

I have been following this Railscast tutorial about complex forms with Rails but I'm using MongoDB as my database. I'm having no problems inserting documents with it's childs and retrieving the data to the edit form, but when I try to update it I get this error

undefined method `assert_valid_keys' for false:FalseClass

this is my entity class

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

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

Does anyone knows whats happening here? Thanks

+1  A: 

What does your Task class look like? Does it use EmbeddedDocument? If not, did you declare a key for project_id in it?

update - it's due to the save(false), do save(:validate => false) and you should be set.

x1a4
I updated the entry with the Task class, thanks!
FCastellanos
Dude thanks a lot for the quickness of your answers, I already deleted the project_id in the Task class but it throws the same error, any other ideas?
FCastellanos
A: 

Changed the Task entity from EmbeddedDocument to Document, and deleted the validates_associated: task from Project, it's now working updating, adding and deleting tasks from updating a Project.

Thanks a lot to x1a4 and John Nunemaker for the help :-)

FCastellanos