Rails创建映射到错误的路由

时间:2016-01-20 16:12:52

标签: ruby-on-rails ruby-on-rails-4 routes

我有一个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'路线?

非常感谢。

1 个答案:

答案 0 :(得分:1)

POST被路由到创建操作,您明确说明了您希望在create来电中忽略resources操作的操作

将其更改为此应该可以正常工作

scope "/admin" do
    resources :stores, only: [:index, :create, :edit, :update, :destroy]
end

如果要使用当前命名空间(admin)之外的路由,则需要将url: store_path选项传递给表单帮助程序,并指定method: :post选项。