无法路由到我的控制器中的方法

时间:2016-03-17 14:36:34

标签: ruby-on-rails controller routes

我正在使用Rails 4.2.5。我正在尝试设置我的控制器,以便当登录用户访问/用户/编辑时,他们会看到我的表单,他们可以在其中编辑他们的一些个人资料。所以在config / routes.rb中我有

  resources :users
  …
  get "users/edit" => "users#edit"

然后在“app / controllers / users_controller.rb”中我有

  def edit
    @user = User.find(session["user_id"])
    render 'edit' 
  end

但是当我在浏览器中访问“PEP 0008”时,我收到了错误

The action 'show' could not be found for UsersController

我的控制器中没有“show”方法,但这不是我希望用户去的地方。我希望他们使用编辑方法。

3 个答案:

答案 0 :(得分:1)

您正尝试使用以下链接转到show动作:

http://localhost:3000/users/edit

您有此行动的路线:

GET /users/:id(.:format)    users#show

(:id)(edit)

因为您已经定义了第一个RESTful路由:

resources :users 

其中包括下列所有路线:

users_path      GET       /users(.:format)           users#index
                POST      /users(.:format)           users#create
new_user_path   GET       /users/new(.:format)       users#new
edit_user_path  GET       /users/:id/edit(.:format)  users#edit
user_path       GET       /users/:id(.:format)       users#show
                PATCH     /users/:id(.:format)       users#update
                PUT       /users/:id(.:format)       users#update
                DELETE    /users/:id(.:format)       users#destroy

然后

get "users/edit" => "users#edit"

Rails总能找到第一场比赛。在这种情况下,将应用RESTFul路线的show动作:

GET /users/:id(.:format)    users#show

,其他路线将被忽略。

解决方案:更改路线的顺序。这样编辑路线将首先应用。

答案 1 :(得分:0)

问题在于您正在使用自己的编辑方法混合资源路线,并"Rails routes are matched in the order they are specified"因此它与显示路线users/:id的资源相匹配并停在那里。

您需要将编辑路线移到资源上方。

或者,阅读链接指南,看看是否可以将edit添加为资源的收集路由,以及except资源编辑方法。您可能还需要除了show方法,但是值得玩游戏并看看你想出了什么。路由是一个重要方面,值得时间去理解。

答案 2 :(得分:-1)

从您的路线中删除get "users/edit" => "users#edit",更改为resources :users, only: [:edit](如果您需要更改操作,则更新),从控制器中删除render 'edit'(默认操作)。

访问http://localhost:3000/users/1/edit以查看user_id 1的编辑页面(不能为所有用户编辑页面,您必须指定ID)