问题描述
我有点困惑,我的项目中有管理部分。这些是路线。
Rails.application.routes.draw do
devise_for :users
resources :users
namespace :admin do
get '/' => 'dashboard#index'
resources :dashboard,only: [:index]
resources :categories do
collection do
get :set_active
end
resources :sections,only: [:edit,:new,:create,:update]
end
end
如果我这样开始。
<%= form_for @category,:html => { :multipart => true } do |f| %>
它失败了(因为它试图在没有管理员的情况下搜索错误的 url)。
undefined method
category_path' for #ActionView::Base:0x00000000019320`
所以我定义了 url。
<%= form_for @category,url: admin_categories_path do |f| %>
当我创建新类别时效果很好,但如果我想编辑具有相同表单部分的类别,它会失败:
No route matches [PATCH] "/admin/categories"
但路由存在
admin_categories GET /admin/categories(.:format) admin/categories#index
POST /admin/categories(.:format) admin/categories#create
new_admin_category GET /admin/categories/new(.:format) admin/categories#new
edit_admin_category GET /admin/categories/:id/edit(.:format) admin/categories#edit
admin_category GET /admin/categories/:id(.:format) admin/categories#show
PATCH /admin/categories/:id(.:format) admin/categories#update
PUT /admin/categories/:id(.:format) admin/categories#update
DELETE /admin/categories/:id(.:format) admin/categories#destroy
我的模型中有 index,new,create,update,edit,show
的方法。
我不知道如何正确设置它。
解决方法
您的路线路径中遗漏了 @category
的一个小细节,因此它将构建 url
/admin/categories/1
其中 1
是 @category.id
Rails 从模型构建 url
<%= form_for([:admin,@category]) do |f| %>
因此 rails 为您生成了路线 /admin/categories/:id
,但您正在尝试访问 /admin/categories/
而没有 :id
进一步reading