【问题标题】:Ruby on Rails: Changing friendly URL based on database valueRuby on Rails:根据数据库值更改友好 URL
【发布时间】:2014-03-02 07:53:47
【问题描述】:

我目前的网址设置如下:

localhost:3000/user/3

在我的路由文件中使用它:

resources :users, path: '/user' do

从技术上讲,如果我想更改它,我可以将/user 更改为任何东西,例如:/profile 然后会变成这样:

localhost:3000/profile/3

但是,如果我在注册时有某些选项供用户选择,如果他们将我的应用程序用作:

DesignerDeveloperAssistant

因此,当用户注册并从这三个中进行选择时,它将保存到我的数据库中user_as 列下,并在单元格中进行拼写。


那么如何根据user_as 更改/user?我想要/designer/developer/assistant

【问题讨论】:

  • 不,你想要不同的控制器,为不同的型号提供不同的路线
  • 对我来说这些听起来像是用户角色。我会调查CanCan gem
  • 或查看 the_role gem:github.com/the-teacher/the_role 。如果您只想更改 URL 的 DISPLAY,您可以为所有指向同一个控制器的不同角色设置路由。不知道为什么你会想要那个。

标签: ruby-on-rails ruby ruby-on-rails-3 routes friendly-url


【解决方案1】:

查看路由指南中的“动态段”部分:http://guides.rubyonrails.org/routing.html#dynamic-segments

实际上,您可以将变量添加到路径中。例如:

resources :users, path: ':user_type'

当浏览器请求/foo/1 时,它将使用 user_type "foo" 路由到您的用户控制器。您可能希望将 user_type 的可能值限制在上面的列表中(“designer”、“developer”等。您可以使用分段约束来做到这一点 (http://guides.rubyonrails.org/routing.html#segment-constraints)

但是,我猜您的用户是通过设计之类的东西创建的,而您实际上并不需要通过此界面编辑用户。如果这是真的,我建议创建一个单独的控制器,其中只有 showindex 操作用于查看配置文件。

例如用方法创建ProfilesController,然后添加到routes.rb

get 'profiles/:user_type' => 'profiles#index'
get 'profiles/:user_type/:id' => 'profiles#show'

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多