module Sequel::Plugins::NestedAttributes::ClassMethods
Public Instance Methods
Freeze nested_attributes_module when freezing model class.
# File lib/sequel/plugins/nested_attributes.rb 85 def freeze 86 @nested_attributes_module.freeze if @nested_attributes_module 87 88 super 89 end
Allow nested attributes to be set for the given associations. Options:
- :destroy
-
Allow destruction of nested records.
- :fields
-
If provided, should be an
Array
or proc. If it is an array, restricts the fields allowed to be modified through the association_attributes= method to the specific fields given. If it is a proc, it will be called with the associated object and should return an array of the allowable fields. - :limit
-
For *_to_many associations, a limit on the number of records that will be processed, to prevent denial of service attacks.
- :reject_if
-
A proc that is given each attribute hash before it is passed to its associated object. If the proc returns a truthy value, the attribute hash is ignored.
- :remove
-
Allow disassociation of nested records (can remove the associated object from the parent object, but not destroy the associated object).
- :transform
-
A proc to transform attribute hashes before they are passed to associated object. Takes two arguments, the parent object and the attribute hash. Uses the return value as the new attribute hash.
- :unmatched_pk
-
Specify the action to be taken if a primary key is provided in a record, but it doesn't match an existing associated object. Set to :create to create a new object with that primary key, :ignore to ignore the record, or :raise to raise an error. The default is :raise.
If a block is provided, it is used to set the :reject_if option.
# File lib/sequel/plugins/nested_attributes.rb 115 def nested_attributes(*associations, &block) 116 include(@nested_attributes_module ||= Module.new) unless @nested_attributes_module 117 opts = associations.last.is_a?(Hash) ? associations.pop : OPTS 118 reflections = associations.map{|a| association_reflection(a) || raise(Error, "no association named #{a} for #{self}")} 119 reflections.each do |r| 120 r[:nested_attributes] = opts.dup 121 r[:nested_attributes][:unmatched_pk] ||= :raise 122 r[:nested_attributes][:reject_if] ||= block 123 def_nested_attribute_method(r) 124 end 125 end
Private Instance Methods
Add a nested attribute setter method to a module included in the class.
# File lib/sequel/plugins/nested_attributes.rb 131 def def_nested_attribute_method(reflection) 132 @nested_attributes_module.class_eval do 133 define_method("#{reflection[:name]}_attributes=") do |v| 134 set_nested_attributes(reflection[:name], v) 135 end 136 end 137 end