我刚刚在轨道上开始使用ruby而我没有得到如何在网址中隐藏ID,因此用户无法看到它
例如,对于创建新用户,路线将是
用户/新
要编辑现有用户,路线应为 -
用户/:ID /编辑
但id对用户来说是一个不必要的细节。那么我们如何将其隐藏在用户之外以及新的路线。
答案 0 :(得分:2)
这个问题至少有两种观点。
第一个视角是用户的视角。我假设您正在谈论用户编辑自己的个人资料。在这种情况下,ID确实是多余的。我建议您通过添加名为profile
的资源和相应的ProfilesController
来处理此用例。在config/routes.rb
添加:
resource :profile, only: [:show, :update]
请注意,它显示的是resource
,而不是resources
。
第二个视角是管理员的视角。在这种情况下,最好使用resources
(不是resource
),以便管理员能够编辑他想要的任何用户。最重要的是,管理员可能拥有一些普通用户缺乏的额外功能(例如:让某人成为管理员)。
答案 1 :(得分:0)
您需要在网址中包含一些唯一标识符。但是,此唯一标识符不必是数据库生成的自动递增ID。如果您已确保其他字段(例如用户名)的唯一性,则可以将其用作路径的一部分。
users/:username/edit
使用This link,我们可以看到路由中的资源定义可以在一行中为所有路由完成
resources :users, param: :username
您的UsersController
看起来像这样
class UsersController
...
def edit
@user = User.where(username: params[:username]).first
...
end
end
您还可以将模型上的to_param
方法设置为新标识的username
class User
...
def to_param
username
end
...
end
这将允许你做
@user = User.where(username: "test123")
edit_user_path(@user) #=> /users/test123/edit
感谢Simple Lime指出这一点。
修改
此更新将保持new
路由不变。它仍然是
/users/new
答案 2 :(得分:0)
您可以定义邮寄路线
post 'users/edit', to: user#edit
在编辑方法中,您可以从params