在rails中制作漂亮的网址.将/ users /更改为数据库字段

psh*_*rma 2 ruby-on-rails rails-routing ruby-on-rails-3

现在,我的网址被渲染为

/users/2/products
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用friendly_id将其渲染为

/users/username/products
Run Code Online (Sandbox Code Playgroud)

但我不想那样.在我的数据库中User,有一个字段role,其条目如 - worker,janitor等等.所以,我想拥有

/users/2/products
Run Code Online (Sandbox Code Playgroud)

/worker/username/products or /janitor/username/products and so on..
Run Code Online (Sandbox Code Playgroud)

我该怎么做 ?我可以使用friendly_id来做吗?

fot*_*nus 5

我不知道friendly_id.我甚至无法确定你在问什么,但有些东西告诉我你要定义一个自定义路线.

添加自定义路线

在您的路线文件中,您可以添加

match "/worker/:username/products" => "users#show"
Run Code Online (Sandbox Code Playgroud)

并在操作中,检查:username参数变量.

if params[:username]
  @user = User.find_by_name(params[:username])
else
  @user = User.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

针对您的具体案例的路线

在你的情况下,你似乎想在你的route.rb中想要这个:

match "/:role/:username/products" => "users#show"
Run Code Online (Sandbox Code Playgroud)

这是你使用params的行动:

User.where("role = '?' and username = '?', pararms[:role], params[:username]) 
Run Code Online (Sandbox Code Playgroud)

这条路线将访问像一个URL /worker/fotanus/products/的动作结束了User#showparams[:role] = 'worker'params[:username] = 'fotanus'.