Проблема в параметре: name_url в вашем маршруте:
map.member 'members/:id/:name_url', :controller => 'members', :action => 'show', :requirements => { :id => /\d+/ }
Когда вы передаете объект ActiveRecord в качестве опции для url_for (что и делает link_to), Rails будет неявно вызывать метод to_param модели. Который, если не переопределен, только возвращает id id. Вы можете переопределить to_param, но это не даст вам URL, который вы хотите. Потому что to_param используется для создания строки, которая заменяет id в URL. Лучшее, что вы могли бы сделать с минимальными изменениями, это согласиться на что-то вроде этого:
members/:id
где: id на самом деле :id-:name_url
Действительно лучший вариант - это то, что предлагает Дэн МакНевин. Однако, если это слишком долго для вас, вы всегда можете просто сделать это помощником:
def link_to_member member
link_to member.name, member_url(member, :name_url => member.name)
end
И используйте его вместо link_to.
link_to "Bill", member
=> link_to_member member