Module: MassAssignment
- Defined in:
- lib/mass_assignment.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#assign(attributes, allowed_attributes = nil, &block) ⇒ Object
Basic Example:.
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 |