我在这里已经看到了这个问题,但不幸的是答案不起作用。仅供参考,这是一个Rails 2.3.11应用程序。
我想使用此link_to帮助器对RESTful资源调用create:
link_to("Add", part_types_path(myid), :method => :post)
现在非常非常奇怪的是,我传递给URL帮助器的id被Rails应用程序解释为“格式化”!所以链接出来了:
/part_types.12345
其中“12345”是id。疯狂!
我遗漏了一些非常基本的东西,但我从未见过Rails尝试将对象id称为格式。
这是路线条目:
map.resources :part_types, :collection => { :part_list => :get }
这是“rake routes”的结果
POST /part_types(.:format) {:controller=>"part_types", :action=>"create"}
请注意没有任何类型的ID!
答案 0 :(得分:1)
如果方法为part_types
,则名称为index
的路由引用GET
操作;如果方法为create
,则引用POST
操作。这些操作都没有参数化路径(与show
相比,它应该看起来像/part_types/:id
)。 create
应该创建一个新记录并返回其id - 您通常不会在请求中传递它们,因为服务器上的唯一ID生成更容易。
您的第一个参数将被解释为格式,因为路由不接受任何参数。将此与以下内容进行比较:
part_type_path(1)
应该返回/part_types/1
part_type_path(1, :json)
应该返回/part/types/1.json
。选中actionpack/lib/action_dispatch/routing/mapper.rb,了解resources
的定义方式。