On this page
module ActiveModel::Conversion
Active Model Conversion
Handles default conversions: #to_model, #to_key, #to_param, and to_partial_path.
Let's take for example this non-persisted object.
class ContactMessage
include ActiveModel::Conversion
# ContactMessage are never persisted in the DB
def persisted?
false
end
end
cm = ContactMessage.new
cm.to_model == cm # => true
cm.to_key # => nil
cm.to_param # => nil
cm.to_partial_path # => "contact_messages/contact_message"
Public Instance Methods
Returns an Enumerable of all key attributes if any is set, regardless if the object is persisted or not. Returns nil
if there are no key attributes.
class Person < ActiveRecord::Base
end
person = Person.create
person.to_key # => [1]
# File activemodel/lib/active_model/conversion.rb, line 51
def to_key
key = respond_to?(:id) && id
key ? [key] : nil
end
If your object is already designed to implement all of the Active Model you can use the default :to_model
implementation, which simply returns self
.
class Person
include ActiveModel::Conversion
end
person = Person.new
person.to_model == person # => true
If your model does not act like an Active Model object, then you should define :to_model
yourself returning a proxy object that wraps your object with Active Model compliant methods.
# File activemodel/lib/active_model/conversion.rb, line 39
def to_model
self
end
Returns a string
representing the object's key suitable for use in URLs, or nil
if persisted?
is false
.
class Person < ActiveRecord::Base
end
person = Person.create
person.to_param # => "1"
# File activemodel/lib/active_model/conversion.rb, line 64
def to_param
(persisted? && key = to_key) ? key.join('-') : nil
end
Returns a string
identifying the path associated with the object. ActionPack uses this to find a suitable partial to represent the object.
class Person
include ActiveModel::Conversion
end
person = Person.new
person.to_partial_path # => "people/person"
# File activemodel/lib/active_model/conversion.rb, line 77
def to_partial_path
self.class._to_partial_path
end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.