如何在rails中定义路径隐藏网址中的ID等信息

时间:2017-07-24 13:51:08

标签: ruby-on-rails

我刚刚在轨道上开始使用ruby而我没有得到如何在网址中隐藏ID,因此用户无法看到它

例如,对于创建新用户,路线将是

  

用户/新

要编辑现有用户,路线应为 -

  

用户/:ID /编辑

但id对用户来说是一个不必要的细节。那么我们如何将其隐藏在用户之外以及新的路线。

3 个答案:

答案 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

获取ID