我正在使用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”方法,但这不是我希望用户去的地方。我希望他们使用编辑方法。
答案 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)