我有一个Rails表单来为商店创建配置文件。最初,我已经处理了路由resources :stores
,一切都很顺利。但是,我想在管理员范围和“公共场所”之间划分我的商店资源。范围。一旦我这样做,表单提交停止工作,传递给我错误'没有路由匹配[POST]" / admin / stores"'。我不清楚为什么会发生这种情况,因为我认为我的资源分配得恰到好处......
scope "/admin" do
resources :stores, only: [:index, :edit, :update, :destroy]
end
resources :stores, only: [:new, :create]
以下是控制器操作......
def new
@store = current_user.stores.new
@store.build_address
@storeType = StoreType.all
end
def create
@store = current_user.stores.new(store_params)
if @store.save
flash[:notice] = "New store created"
redirect_to root_path
else
#ERROR STUFF
end
end
我在Rails路由信息中注意到的一件事是,create的POST操作被集中到store_path,其中包含所有其他/ admin前缀资源
stores_path
GET /admin/stores(.:format) stores#index
edit_store_path
GET /admin/stores/:id/edit(.:format) stores#edit
store_path
PATCH /admin/stores/:id(.:format) stores#update
PUT /admin/stores/:id(.:format) stores#update
DELETE /admin/stores/:id(.:format) stores#destroy
POST /stores(.:format) stores#create
new_store_path
GET /stores/new(.:format) stores#new
我不确定我理解为什么会这样,任何帮助都会非常感激。为什么表单尝试发布到管理路由时,我将:new和:create action放在' public'路线?
非常感谢。
答案 0 :(得分:1)
POST
被路由到创建操作,您明确说明了您希望在create
来电中忽略resources
操作的操作
将其更改为此应该可以正常工作
scope "/admin" do
resources :stores, only: [:index, :create, :edit, :update, :destroy]
end
如果要使用当前命名空间(admin)之外的路由,则需要将url: store_path
选项传递给表单帮助程序,并指定method: :post
选项。