Rails 更新操作的路由助手是什么?

ser*_*ine 3 rest ruby-on-rails ruby-on-rails-3

我想在我的表单助手中放置一个路由助手来执行update操作:

<%= s3_uploader_form post: <route helper goes here>, as: "shop[logo_ori]" do %>
  <%= file_field_tag :file %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时,rake routes我没有看到帮助PUT

shops     GET    /shops(.:format)                     shops#index
          POST   /shops(.:format)                     shops#create
new_shop  GET    /shops/new(.:format)                 shops#new
edit_shop GET    /shops/:id/edit(.:format)            shops#edit
shop      GET    /shops/:id(.:format)                 shops#show
          PUT    /shops/:id(.:format)                 shops#update
Run Code Online (Sandbox Code Playgroud)

有问题的表单助手来自 Railscasts#383 的source。我发现上传表单对于创建新模型对象非常有用,但我正在努力让它用于更新模型对象。

当我尝试 route helper 时shops_url,它运行了一个失败的POST操作:

Started POST "/shops" for 127.0.0.1 at 2012-12-27 01:10:22 +0800
Processing by ShopsController#create as */*
Parameters: {"shop"=>{"logo_ori"=>"https://bucket.s3.amazonaws.com/example.gif"}}
User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
(0.1ms)  BEGIN
(0.1ms)  ROLLBACK
<additional output redacted>
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

eka*_*mpp 5

虽然 HTTP 和 rack 支持使用 PUT 方法,但浏览器不支持。因此,为了欺骗放置请求,您需要向_method=put要发布到的 url添加一个参数。

rails 中的链接如下所示:

<%= link_to "update me", "/link/to/resource", method: :put %>
Run Code Online (Sandbox Code Playgroud)