No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
A DataMapper plugin that adds the possibility to perform nested model attribute assignment
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0.10.0
 Project Readme

dm-accepts_nested_attributes

A DataMapper plugin that allows nested model attribute assignment like activerecord does.

Current documentation can always be found at rdoc.info

Examples

The following example illustrates the use of this plugin.

require "rubygems"

require "dm-core"
require "dm-validations"
require "dm-accepts_nested_attributes"

DataMapper::Logger.new(STDOUT, :debug)  
DataMapper.setup(:default, 'sqlite3::memory:')
  
class Person
  include DataMapper::Resource
  property :id,   Serial
  property :name, String
  has 1, :profile
  has n, :project_memberships
  has n, :projects, :through => :project_memberships

  accepts_nested_attributes_for :profile
  accepts_nested_attributes_for :projects

  # adds the following instance methods
  # #profile_attributes=
  # #profile_attributes
  # #projects_attributes=
  # #projects_attributes
end

class Profile
  include DataMapper::Resource
  property :id,      Serial
  property :person_id, Integer
  belongs_to :person

  accepts_nested_attributes_for :person

  # adds the following instance methods
  # #person_attributes=
  # #person_attributes
end

class Project
  include DataMapper::Resource
  property :id, Serial
  has n, :tasks
  has n, :project_memberships
  has n, :people, :through => :project_memberships

  accepts_nested_attributes_for :tasks
  accepts_nested_attributes_for :people
  
  # adds the following instance methods
  # #tasks_attributes=
  # #tasks_attributes
  # #people_attributes=
  # #people_attributes
end

class ProjectMembership
  include DataMapper::Resource
  property :id,         Serial
  property :person_id,  Integer
  property :project_id, Integer
  belongs_to :person
  belongs_to :project
end

class Task
  include DataMapper::Resource
  property :id,         Serial
  property :project_id, Integer
  belongs_to :project
end

DataMapper.auto_migrate!

TODO

  • collect validation errors from related resources
  • update README to include more complete usecases
  • think about replacing :reject_if with :if and :unless