Readme.markdown in deferred_associations-0.5.5 vs Readme.markdown in deferred_associations-0.5.6

- old
+ new

@@ -1,85 +1,85 @@ -Make ActiveRecord defer/postpone saving the records you add to an habtm (has_and_belongs_to_many) or has_many association -until you call model.save, allowing validation in the style of normal attributes. - -[![Build Status](https://secure.travis-ci.org/MartinKoerner/deferred_associations.png?branch=master)](http://travis-ci.org/MartinKoerner/deferred_associations) [![Dependency Status](https://gemnasium.com/MartinKoerner/deferred_associations.png?travis)](https://gemnasium.com/MartinKoerner/deferred_associations) - -How to install -============== - - gem install deferred_associations - -Usage -===== - - class Room < ActiveRecord::Base - has_and_belongs_to_many_with_deferred_save :people - has_many_with_deferred_save :tables - - validate :usage - before_save :check_change - - def usage - if people.size > 30 - errors.add :people, "There are too many people in this room" - end - if tables.size > 15 - errors.add :tables, "There are too many tables in this room" - end - # Neither people nor tables are saved to the database, if a validation error is added - end - - def check_change - # you can check, if there were changes to the association - if people != people_without_deferred_save - self.updated_at = Time.now.utc - end - end - end - -Compatibility -============= - -Tested with Rails 2.3.14, 3.2.3, 3.2.14 on Ruby 1.8.7, 1.9.3 and JRuby 1.7.4 - -Note, that Rails 3.2.14 associations are partly broken under JRuby cause of https://github.com/rails/rails/issues/11595 -You'll need to upgrade activerecord-jdbc-adapter to >= 1.3.0.beta1, if you want to use this combination. - -Gotchas -======= - -Be aware, that the habtm association objects sometimes asks the database instead of giving you the data directly from the array. So you can get something -like - - room = Room.create - room.people << Person.create - room.people.first # => nil, since the DB doesn't have the association saved yet - - -Also it is good to know, that the array you set to an association is stored there directly, so after setting a list, the typical association -methods are not working: - - room = Room.create - room.people.klass # => Person - room.people = [Person.first] - room.people.klass # => undefined method klass for #Array:0x007fa3b9efc2c0` - -Bugs -==== - -http://github.com/MartinKoerner/deferred_associations/issues - -History -====== - -Most of the code for the habtm association was written by TylerRick for his gem [has_and_belongs_to_many_with_deferred_save](https://github.com/TylerRick/has_and_belongs_to_many_with_deferred_save) -Mainly, I changed two things: - -* added ActiveRecord 3 compatibility -* removed singleton methods, because they interfere with caching - -License -======= - -This plugin is licensed under the BSD license. - +Make ActiveRecord defer/postpone saving the records you add to an habtm (has_and_belongs_to_many) or has_many association +until you call model.save, allowing validation in the style of normal attributes. + +[![Build Status](https://secure.travis-ci.org/MartinKoerner/deferred_associations.png?branch=master)](http://travis-ci.org/MartinKoerner/deferred_associations) [![Dependency Status](https://gemnasium.com/MartinKoerner/deferred_associations.png?travis)](https://gemnasium.com/MartinKoerner/deferred_associations) + +How to install +============== + + gem install deferred_associations + +Usage +===== + + class Room < ActiveRecord::Base + has_and_belongs_to_many_with_deferred_save :people + has_many_with_deferred_save :tables + + validate :usage + before_save :check_change + + def usage + if people.size > 30 + errors.add :people, "There are too many people in this room" + end + if tables.size > 15 + errors.add :tables, "There are too many tables in this room" + end + # Neither people nor tables are saved to the database, if a validation error is added + end + + def check_change + # you can check, if there were changes to the association + if people != people_without_deferred_save + self.updated_at = Time.now.utc + end + end + end + +Compatibility +============= + +Tested with Rails 2.3.14, 3.2.3, 3.2.14, 4.0 and 4.1 on Ruby 1.8.7, 1.9.3 and JRuby 1.7.12 + +Note, that Rails 3.2.14 associations are partly broken under JRuby cause of https://github.com/rails/rails/issues/11595 +You'll need to upgrade activerecord-jdbc-adapter to >= 1.3.0.beta1, if you want to use this combination. + +Gotchas +======= + +Be aware, that the habtm association objects sometimes asks the database instead of giving you the data directly from the array. So you can get something +like + + room = Room.create + room.people << Person.create + room.people.first # => nil, since the DB doesn't have the association saved yet + + +Also it is good to know, that the array you set to an association is stored there directly, so after setting a list, the typical association +methods are not working: + + room = Room.create + room.people.klass # => Person + room.people = [Person.first] + room.people.klass # => undefined method klass for #Array:0x007fa3b9efc2c0` + +Bugs +==== + +http://github.com/MartinKoerner/deferred_associations/issues + +History +====== + +Most of the code for the habtm association was written by TylerRick for his gem [has_and_belongs_to_many_with_deferred_save](https://github.com/TylerRick/has_and_belongs_to_many_with_deferred_save) +Mainly, I changed two things: + +* added ActiveRecord 3 compatibility +* removed singleton methods, because they interfere with caching + +License +======= + +This plugin is licensed under the BSD license. + 2013 (c) Martin Körner \ No newline at end of file