自定义Devise路由后,我遇到了一些路由问题。
目前设置(但失败):
devise_for :users do
...
end
devise_scope :user do
scope "/me/account" do
get "/" => "users/registrations#edit", :as => :my_account
get "/:what" => "accounts#edit", :as => :my_account_edit
end
end
resources :accounts, :only => [:edit, :update]
activate_account GET /reactivate(.:format) users#reactivate
my_account GET /me/account(.:format) users/registrations#edit
my_account_edit GET /me/account/:what(.:format) accounts#edit
cancel GET /me/account/cancel(.:format) users/registrations#cancel
DELETE /me/account(.:format) users/registrations#destroy
edit_account GET /accounts/:id/edit(.:format) accounts#edit
account PATCH /accounts/:id(.:format) accounts#update
PUT /accounts/:id(.:format) accounts#update
由于/ me / account实际上是显示注册#edit(设计),所有/ me / account / helpme都是自定义表单字段
这有问题:
/ me / account / helpme在表单提交时转到/ accounts / 1(当前用户ID)并抛出错误
没有路由匹配{:action =&gt;“edit”,:controller =&gt;“accounts”,:id =&gt;“1”,:what =&gt; nil}缺少必需的键:[:what] < / p>
这些问题让我疯狂。任何人都可以提供一些修复(一个或多个)路由问题的建议吗?
答案 0 :(得分:1)
关于表单提交错误。
您需要覆盖表单中的网址以提交至:
<%= form_for @resource, url: my_account_edit(what: params[:what]) do |f| %>
这应该在您的视图或设计生成的视图中完成。
如果您没有生成设计视图,那么,只需在终端中运行:
rails g devise:views
修改强>
您应该告诉我们您的视图中的表单是什么样的,以及控制器如何处理自定义字段的更新。