没有路由匹配active_admin中的[PUT]错误

时间:2012-10-04 19:56:55

标签: ruby-on-rails routing

在active_admin partials中创建了一个表单输入:

<%= semantic_nested_form_for @item, :url => admin_items_path(@item) do |f| %>
  <fieldset class="inputs">
    <ol>
      <%= f.input :category %></br>
      <%= f.input :title  %>
      <%= f.input :photo1 %>
      <%= f.input :photo2 %>
    </ol>
  </fieldset>
  <%= f.fields_for :ItemColors do |i| %>
    <fieldset class="inputs">
      <ol>
        <%= i.input :DetailColor %>
        <%= i.input :size,  :input_html => { :size => "10" } %>
        <%= i.link_to_remove "remove" %>
      </ol>
    </fieldset>
  <% end %>
  <%= f.link_to_add "add", :ItemColors %>
  <%= f.actions %>
<% end %>

创建一个新项目可以创建并抛出新项目,但是如果我确实更新现有项目被路由到这样的路径存在时发生错误:

No route matches [PUT] "/admin/items.150" #150 is item_id

rake routes:

batch_action_admin_items POST   /admin/items/batch_action(.:format)   admin/items#batch_action
admin_items GET                 /admin/items(.:format)                admin/items#index
POST                            /admin/items(.:format)                admin/items#create
new_admin_item GET              /admin/items/new(.:format)            admin/items#new
edit_admin_item GET             /admin/items/:id/edit(.:format)       admin/items#edit
admin_item GET                  /admin/items/:id(.:format)            admin/items#show
PUT                             /admin/items/:id(.:format)            admin/items#update
DELETE                          /admin/items/:id(.:format)            admin/items#destroy

帮助解决这个问题

UPD

我发现了错误,但尚未了解如何修复

升级是一个请求:

PUT "/admin/items.150"

但应该:

PUT "/admin/items/150"

我无法理解地址出现在哪里“。”

2 个答案:

答案 0 :(得分:1)

您的表单正在使用:method => POST提交数据,而您的路线预计PUTPOST仅匹配

POST /admin/items(.:format) admin/items#create

因此它认为您的ID是.:format参数。因此失败了。您需要将表单更改为PUT而不是POST

答案 1 :(得分:0)

你应该能够做到这一点:

<%= semantic_nested_form_for [:admin, @item] do |f| %>

正如@cdesrosiers指出的那样,您随后获得的No route matches [GET] "/items/152"错误可能是因为您实际上在控制器@itemcreate操作中重定向到update需要这样做:

redirect_to admin_item_path(@item)