class ActiveRecord::Relation
Public Instance Methods
create(attributes = nil, options = {}, &block)
click to toggle source
# File lib/active_record/mass_assignment_security/relation.rb, line 19 def create(attributes = nil, options = {}, &block) if attributes.is_a?(Array) attributes.collect { |attr| create(attr, options, &block) } else attrs = respond_to?(:values_for_create) ? values_for_create(attributes) : attributes scoping { klass.create(attrs, options, &block) } end end
create!(attributes = nil, options = {}, &block)
click to toggle source
# File lib/active_record/mass_assignment_security/relation.rb, line 29 def create!(attributes = nil, options = {}, &block) if attributes.is_a?(Array) attributes.collect { |attr| create!(attr, options, &block) } else attrs = respond_to?(:values_for_create) ? values_for_create(attributes) : attributes scoping { klass.create!(attrs, options, &block) } end end
find_or_create_by(attributes, options = {}, &block)
click to toggle source
# File lib/active_record/mass_assignment_security/relation.rb, line 85 def find_or_create_by(attributes, options = {}, &block) find_by(attributes.respond_to?(:to_unsafe_h) ? attributes.to_unsafe_h : attributes) || create(attributes, options, &block) end
find_or_create_by!(attributes, options = {}, &block)
click to toggle source
# File lib/active_record/mass_assignment_security/relation.rb, line 89 def find_or_create_by!(attributes, options = {}, &block) find_by(attributes.respond_to?(:to_unsafe_h) ? attributes.to_unsafe_h : attributes) || create!(attributes, options, &block) end
find_or_initialize_by(attributes, options = {}, &block)
click to toggle source
# File lib/active_record/mass_assignment_security/relation.rb, line 81 def find_or_initialize_by(attributes, options = {}, &block) find_by(attributes.respond_to?(:to_unsafe_h) ? attributes.to_unsafe_h : attributes) || new(attributes, options, &block) end
first_or_create(attributes = nil, options = {}, &block)
click to toggle source
Tries to load the first record; if it fails, then create
is called with the same arguments as this method.
Expects arguments in the same format as Base.create
.
Examples¶ ↑
# Find the first user named Penélope or create a new one. User.where(:first_name => 'Penélope').first_or_create # => <User id: 1, first_name: 'Penélope', last_name: nil> # Find the first user named Penélope or create a new one. # We already have one so the existing record will be returned. User.where(:first_name => 'Penélope').first_or_create # => <User id: 1, first_name: 'Penélope', last_name: nil> # Find the first user named Scarlett or create a new one with a particular last name. User.where(:first_name => 'Scarlett').first_or_create(:last_name => 'Johansson') # => <User id: 2, first_name: 'Scarlett', last_name: 'Johansson'> # Find the first user named Scarlett or create a new one with a different last name. # We already have one so the existing record will be returned. User.where(:first_name => 'Scarlett').first_or_create do |user| user.last_name = "O'Hara" end # => <User id: 2, first_name: 'Scarlett', last_name: 'Johansson'>
# File lib/active_record/mass_assignment_security/relation.rb, line 63 def first_or_create(attributes = nil, options = {}, &block) first || create(attributes, options, &block) end
first_or_create!(attributes = nil, options = {}, &block)
click to toggle source
Like first_or_create
but calls create!
so an exception is raised if the created record is invalid.
Expects arguments in the same format as Base.create!
.
# File lib/active_record/mass_assignment_security/relation.rb, line 70 def first_or_create!(attributes = nil, options = {}, &block) first || create!(attributes, options, &block) end
first_or_initialize(attributes = nil, options = {}, &block)
click to toggle source
Like first_or_create
but calls new
instead of create
.
Expects arguments in the same format as Base.new
.
# File lib/active_record/mass_assignment_security/relation.rb, line 77 def first_or_initialize(attributes = nil, options = {}, &block) first || new(attributes, options, &block) end
new(attributes = nil, options = {}, &block)
click to toggle source
# File lib/active_record/mass_assignment_security/relation.rb, line 13 def new(attributes = nil, options = {}, &block) attrs = respond_to?(:values_for_create) ? values_for_create(attributes) : attributes scoping { klass.new(attrs, options, &block) } end