Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A DataMapper plugin that allows nested model assignment like activerecord.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 tasks
Octocat-spinner-32 .document
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .yardopts
Octocat-spinner-32 Gemfile
Octocat-spinner-32 LICENSE.txt
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 dm-accepts_nested_attributes.gemspec
README.md

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
Something went wrong with that request. Please try again.