如何在rails 3中的命名空间中指定资源上的操作?

时间:2010-05-17 17:02:04

标签: ruby-on-rails routing ruby-on-rails-3

我有一个资源:命名空间中的产品:shop,像这样:

namespace :shop do
  resources :products
  root :to => 'products#index'
end

运行rake routes时,会输出以下内容:

edit_shop_product GET    /shop/products/:id/edit(.:format) {:action=>"edit", :controller=>"shop/products"}

但是当我在局部视图中使用edit_shop_product_path时,就像这样:

<%= button_to "Edit", edit_shop_product_path(product) %>

我得到一个ActionController异常:No route matches "/shop/products/1/edit"

我错过了什么?

2 个答案:

答案 0 :(得分:1)

好的,我最终找到了答案。问题是button_to方法默认生成POST http请求。将此更改为GET,如下所示:

<%= button_to "Edit", edit_shop_product_path(product), :method => :get %>

或者使用link_to方法,它的工作方式与宣传的一样。

答案 1 :(得分:0)

  1. controllers/目录
  2. 下创建名为shop的目录
  3. 在商店目录
  4. 下创建名为products_controller.rb的红宝石文件
  5. 将控制器命名为class Shop::ProductsController < BaseController