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"
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.