Module: MassAssignment

Defined in:
lib/mass_assignment.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



2
3
4
5
6
7
8
9
# File 'lib/mass_assignment.rb', line 2

def self.included(base)
  base.class_eval do
    class_attribute :assignment_policy, :instance_reader => false, :instance_writer => false
    def self.mass_assignment_policy(val)
      self.assignment_policy = val
    end
  end
end

Instance Method Details

#assign(attributes, allowed_attributes = nil, &block) ⇒ Object

Basic Example:

@user = User.new
@user.assign(params[:user], [:username, :email, :password, :password_confirmation])
@user.save!

Nested Assignment:

@user = User.find_by_id(params[:id])
@user.assign(params[:user], [:username, :email, {:dog_attributes => [:id, :_destroy, :name, :color]}])
@user.save!

Deep Assignment:

@user = User.find_by_id(params[:id])
@user.assign(params[:user], [:username, :email]) do |user_params|
  @user.dog.assign(user_params[:dog], [:name, :color])
end
@user.save!


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/mass_assignment.rb', line 30

def assign(attributes, allowed_attributes = nil, &block)
  return unless attributes and attributes.is_a? Hash

  if allowed_attributes
    safe_attributes = filter_attributes(attributes, :only => allowed_attributes)
    yield attributes if block_given?
    mass_assign_safe_attributes(safe_attributes)
  else
    if policy = self.class.assignment_policy
      safe_attributes = filter_attributes(attributes, policy)
      mass_assign_safe_attributes(safe_attributes)
    else
      # fall back on Rails' system
      self.attributes = attributes
    end
  end
end