def path_value(path)
      path = path.split('.').map { |pa| pa.to_sym } if String === path
      path.inject(self) do |parent, pa|
        value = parent.send(pa)
        return if value.nil?
        value
      end
    end
def path_value(path)
      path = path.split('.').map { |pa| pa.to_sym } if String === path
      path.inject(self) do |parent, pa|
        value = parent.send(pa)
        return if value.nil?
        value
      end
    end
Returns the value for the given attribute path Array or String expression, e.g.:
   study.path_value("site.address.state")
 follows the +study+ -> +site+ -> +address+ -> +state+ accessors and returns the +state+
 value, or nil if any intermediate reference is nil.
 The array form for the above example is:
  study.path_value([:site, :address, :state])

 @param [<Symbol>] path the attributes to navigate
 @return the attribute navigation result