如何从link_to助手调用“创建”操作?

时间:2012-07-25 20:34:36

标签: ruby-on-rails

我在这里已经看到了这个问题,但不幸的是答案不起作用。仅供参考,这是一个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!

1 个答案:

答案 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的定义方式。