方法
- T
執行個體公開方法
to_param(method_name = nil) 連結
定義模型的 to_param
方法,使用 method_name
產生「美觀」的網址,它可以是能回應 to_s
的任何屬性或方法。
class User < ActiveRecord::Base
to_param :name
end
user = User.find_by(name: 'Fancy Pants')
user.id # => 123
user_path(user) # => "/users/123-fancy-pants"
超過 20 個字元的值將會被截斷。以字為單位截斷該值。
user = User.find_by(name: 'David Heinemeier Hansson')
user.id # => 125
user_path(user) # => "/users/125-david-heinemeier"
由於產生的參數是以記錄的 id
開頭,因此適合傳遞給 find
。例如在控制器中
params[:id] # => "123-fancy-pants"
User.find(params[:id]).id # => 123
原始碼: 顯示 | 在 GitHub 上
# File activerecord/lib/active_record/integration.rb, line 147 def to_param(method_name = nil) if method_name.nil? super() else define_method :to_param do if (default = super()) && (result = send(method_name).to_s).present? && (param = result.squish.parameterize.truncate(20, separator: /-/, omission: "")).present? "#{default}-#{param}" else default end end end end