Возможно ли псевдоним to_s?

Вместо переопределения to_s в моей модели я хотел бы псевдоним его к существующему методу full_name,

И то и другое alias а также alias_method не похоже на работу, как ожидалось.

С помощью alias

class Person < ActiveRecord::Base

  # ... other model code.

  alias to_s full_name

  def full_name
     "#{first_name} #{last_name}"
  end
end

# In Terminal
> Person.last.to_s  #=> "#<Person:0x007fa5f8a81b50>"

С помощью alias_method

class Person < ActiveRecord::Base

  # ... other model code.

  alias_method :to_s, :full_name

  def full_name
     "#{first_name} #{last_name}"
  end
end

# In Terminal
> Person.last.to_s  #=> "#<Person:0x007fa5f8a81b50>"

1 ответ

Решение

Догадаться...

alias а также alias_method нужно прийти после того метода, к которому вы применяете псевдоним.

Таким образом, оба из следующих работают нормально:

С помощью alias

class Person
  def full_name
     "#{first_name} #{last_name}"
  end

  alias to_s full_name
end

# In Terminal
> Person.last.to_s  #=> "Don Draper"

С помощью alias_method

class Person
  def full_name
     "#{first_name} #{last_name}"
  end

  alias_method :to_s, :full_name
end

# In Terminal
> Person.last.to_s  #=> "Don Draper"

Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам