instance method to_param

Ruby on Rails edge

Since v3.2.22.5

Available in: v3.2.22.5 v4.0.13 v4.1.16 v4.2.11.3 v5.0.7.2 v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Signature

to_param()

Returns a String, which Action Pack uses for constructing a URL to this object. The default implementation returns this record’s id as a String, or nil if this record is unsaved.

For example, suppose that you have a User model, and that you have a ‘resources :users` route. Normally, user_path will construct a path with the user object’s ‘id’ in it:

“‘ user = User.find_by(name: ’Phusion’) user_path(user) # => “/users/1” “‘

You can override to_param in your model to make user_path construct a path using the user’s name instead of the user’s id:

“‘ class User < ActiveRecord::Base

def to_param  # overridden
  name
end

end

user = User.find_by(name: ‘Phusion’) user_path(user) # => “/users/Phusion” “‘

Source
# File activerecord/lib/active_record/integration.rb, line 61
    def to_param
      id = self.id
      return unless id

      # Only composite primary keys need their values joined. A single
      # integer or string key is stringified directly, without the wrapping
      # array that Array(id).join would allocate. The string is still copied
      # so that callers never hold the record's own attribute value.
      case id
      when Integer then id.to_s
      when String then id.dup
      else Array(id).join(self.class.param_delimiter)
      end
    end

Defined in activerecord/lib/active_record/integration.rb line 61 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::Integration

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close