diff options
author | José Valim <jose.valim@gmail.com> | 2011-07-28 00:50:07 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-07-28 00:50:07 -0700 |
commit | 1b7db58a0604b01cd5c3a8d73b11158a48e45772 (patch) | |
tree | 69e237be48cc87fecce85c3e3c9cde1f844814d9 /activemodel/lib/active_model/conversion.rb | |
parent | 8248052ee74465abfae5b202270e96c9fd93e785 (diff) | |
parent | bf812074fd55e7dcfa426d6c9bfd4d8d68922194 (diff) | |
download | rails-1b7db58a0604b01cd5c3a8d73b11158a48e45772.tar.gz rails-1b7db58a0604b01cd5c3a8d73b11158a48e45772.tar.bz2 rails-1b7db58a0604b01cd5c3a8d73b11158a48e45772.zip |
Merge pull request #2034 from Casecommons/to_path
Allow ActiveModel-compatible instances to define their own partial paths
Diffstat (limited to 'activemodel/lib/active_model/conversion.rb')
-rw-r--r-- | activemodel/lib/active_model/conversion.rb | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/activemodel/lib/active_model/conversion.rb b/activemodel/lib/active_model/conversion.rb index 1405b1bfe3..dca1c1aa44 100644 --- a/activemodel/lib/active_model/conversion.rb +++ b/activemodel/lib/active_model/conversion.rb @@ -1,9 +1,12 @@ +require 'active_support/concern' +require 'active_support/inflector' + module ActiveModel # == Active Model Conversions # - # Handles default conversions: to_model, to_key and to_param. + # Handles default conversions: to_model, to_key, to_param, and to_path. # - # Let's take for example this non persisted object. + # Let's take for example this non-persisted object. # # class ContactMessage # include ActiveModel::Conversion @@ -18,8 +21,11 @@ module ActiveModel # cm.to_model == self # => true # cm.to_key # => nil # cm.to_param # => nil + # cm.to_path # => "contact_messages/contact_message" # module Conversion + extend ActiveSupport::Concern + # If your object is already designed to implement all of the Active Model # you can use the default <tt>:to_model</tt> implementation, which simply # returns self. @@ -45,5 +51,21 @@ module ActiveModel def to_param persisted? ? to_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. + def to_path + self.class.to_path + end + + module ClassMethods + def to_path + @_to_path ||= begin + element = ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(self)) + collection = ActiveSupport::Inflector.tableize(self) + "#{collection}/#{element}".freeze + end + end + end end end |