Изменение URL для объекта в Rails обычно включает две вещи:
Сначала измените соответствующие действия контроллера, чтобы использовать искатель, который работает так, как вы хотите. В вашем случае вы, вероятно, захотите написать собственный искатель в своей модели Invoice, например:
def self.find_by_id_or_sha1(id)
Invoice.find_by_id(id) || Invoice.find_by_sha1(id)
end
и затем используйте Invoice.find_by_id_or_sha1(params[:id])
в действиях вашего контроллера (показать, отредактировать, обновить, уничтожить).
Во-вторых, измените сгенерированные URL-адреса, чтобы они соответствовали вашему новому дизайну (при желании). Итак, если вы хотите, чтобы link_to("Jan 1, 2010", @invoice)
перешел на /client/invoice/0beec7b5ea3f0fdbc95d0
, переопределите метод to_param
по умолчанию в вашей модели Invoice. Например:
def to_param
sha1
end
(Предполагается, что хэш SHA1 вашего счета хранится в атрибуте sha1.)