修改rails中的路由

时间:2016-07-29 10:01:53

标签: ruby-on-rails routes

我是rails的新用户,因此理解routes.rb的工作方式很复杂!所以我尝试修改一条路线,我得到了一条如下所示的路径: user/:id/edit但我希望ID不会出现在路径中。

我尝试使用这种方法:

get '/users/:id/edit', to: 'users#edit', as: 'users/edit'

但它什么都没改变。在我的routes.rb我得到了:

resources :users,  only: [:create, :new, :show, :edit]

有人知道怎么做吗?我已经看了this guide

2 个答案:

答案 0 :(得分:2)

如果您已经查看过指南,请阅读singular resources?

  

有时,您拥有一个客户端始终无需查找的资源   引用ID。例如,您希望/ profile始终显示   当前登录用户的配置文件。 在这种情况下,您可以使用   一个奇异的资源来映射/配置文件(而不是/ profile /:id)   显示行动

resource :geocoder

在您的应用程序中创建六个不同的路径,所有路径都映射到Geocoders控制器:

GET          /geocoder/new  geocoders#new   return an HTML form for creating the geocoder
POST         /geocoder  geocoders#create    create the new geocoder
GET          /geocoder  geocoders#show  display the one and only geocoder resource
GET          /geocoder/edit geocoders#edit  return an HTML form for editing the geocoder
PATCH/PUT    /geocoder  geocoders#update    update the one and only geocoder resource
DELETE       /geocoder  geocoders#destroy   delete the geocoder resource

答案 1 :(得分:0)

如果你已经服用,

resources :users

现在更改此路线,

get '/users/edit', to: 'users#edit', as: 'users_edit'

现在,在您拥有edit link的视图文件中,将链接更改为

<%= link_to 'Edit', users_edit_path(:id => user.id) %>

现在,这会链接到带有id parameter的用户控制器的编辑操作。

现在,在用户控制器文件中,

class UsersController < ApplicationController

  def edit

    // params[:id] will be the ID that you sent through the view file.
    @user = User.find(params[:id])

  end

end  

多数民众赞成,您完成了自定义路线,现在路线将是users/edit instead of users/:id/edit