我想在我的表单助手中放置一个路由助手,进入update
动作:
<%= s3_uploader_form post: <route helper goes here>, as: "shop[logo_ori]" do %>
<%= file_field_tag :file %>
<% end %>
但是当我运行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
有问题的表单助手来自Railscasts#383的source。我发现上传器表单对于创建一个新的模型对象非常有用,但是我很难让它用于更新模型对象。
当我尝试路线帮助器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>
任何帮助?
答案 0 :(得分:4)
虽然HTTP和机架支持使用PUT方法,但浏览器却不支持。因此,为了欺骗put请求,您需要在发布到的url中添加_method=put
参数。
rails中的链接类似于:
<%= link_to "update me", "/link/to/resource", method: :put %>
答案 1 :(得分:3)
与show相同 - “shop_path”,因为它引用相同的URL。不同的只是方法。 Theese Rails路线助手只指向网址,但不是它的方法,这就是为什么它们在这种情况下是相同的。 顺便说一下 - 方法应该是“put:”,而不是“post:”(作为表单助手的参数)