我有一个User类和map.resources:我的路由中的用户。Rails:如何为特定对象创建默认路由
如果创建一个链路
link_to @user.name, @user
它会以某种方式自动建立到/用户/ 3的链路,其中图3是用户的ID。 如果我想创建更多用户友好链接,并且不是通过用户名而是通过用户名识别用户,该怎么办?所以路径看起来像/ users/some_user_name。我如何重新分配@user的默认链接,以便我不需要更改所有模板?
我有一个User类和map.resources:我的路由中的用户。Rails:如何为特定对象创建默认路由
如果创建一个链路
link_to @user.name, @user
它会以某种方式自动建立到/用户/ 3的链路,其中图3是用户的ID。 如果我想创建更多用户友好链接,并且不是通过用户名而是通过用户名识别用户,该怎么办?所以路径看起来像/ users/some_user_name。我如何重新分配@user的默认链接,以便我不需要更改所有模板?
您可以使用FriendlyId宝石。这正是你想要的。例如,如果你想链接看起来像/users/username
:
class User < ActiveRecord::Base
has_friendly_id :username
end
找到它。
在User.rb:
由于这是一个很好的解决方案,但我需要改变它仅适用于“作秀”行为。其余的操作应该继续使用正常的ID。否则,我将不得不改变很多模板,有时我使用@ user.id而不是@user – Arty 2010-09-19 03:22:39
我相信应该有一种方法来为@user – Arty 2010-09-19 03:23:06
重新分配默认路由。只需要为'使用'map.show_user'users /:username',:controller =>“users”,:action =>“show”'显示'行为,并用'except'从REST路由中排除它,但这是一个额外的麻烦。 FriendlyId是更好的做法。只有你必须做的你应该禁止用户注册用户名,比如你的动作名称,例如'new'。顺便问一下,我很好奇你为什么要在其他操作中保留'id'?只是有趣。 – Voldy 2010-09-19 06:44:24