2010-09-19 67 views
2

我有一个User类和map.resources:我的路由中的用户。Rails:如何为特定对象创建默认路由

如果创建一个链路

link_to @user.name, @user 

它会以某种方式自动建立到/用户/ 3的链路,其中图3是用户的ID。 如果我想创建更多用户友好链接,并且不是通过用户名而是通过用户名识别用户,该怎么办?所以路径看起来像/ users/some_user_name。我如何重新分配@user的默认链接,以便我不需要更改所有模板?

回答

2

您可以使用FriendlyId宝石。这正是你想要的。例如,如果你想链接看起来像/users/username

class User < ActiveRecord::Base 
    has_friendly_id :username 
end 
+0

由于这是一个很好的解决方案,但我需要改变它仅适用于“作秀”行为。其余的操作应该继续使用正常的ID。否则,我将不得不改变很多模板,有时我使用@ user.id而不是@user – Arty 2010-09-19 03:22:39

+0

我相信应该有一种方法来为@user – Arty 2010-09-19 03:23:06

+0

重新分配默认路由。只需要为'使用'map.show_user'users /:username',:controller =>“users”,:action =>“show”'显示'行为,并用'except'从REST路由中排除它,但这是一个额外的麻烦。 FriendlyId是更好的做法。只有你必须做的你应该禁止用户注册用户名,比如你的动作名称,例如'new'。顺便问一下,我很好奇你为什么要在其他操作中保留'id'?只是有趣。 – Voldy 2010-09-19 06:44:24

0

找到它。

在User.rb:

​​