3

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 のソースから取得されます。アップローダ フォームは、新しいモデル オブジェクトを作成するのに非常に便利ですが、モデル オブジェクトを更新するのに苦労しています。

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>

何か助けはありますか?

4

2 に答える 2

5

HTTP とラックは PUT メソッドの使用をサポートしていますが、ブラウザーはサポートしていません。_method=putしたがって、put リクエストを偽装するには、投稿先の URL にパラメーターを追加する必要があります。

Rails のリンクは次のようになります。

<%= link_to "update me", "/link/to/resource", method: :put %>
于 2012-12-26T18:13:18.347 に答える
3

同じ URL を参照するため、show - "shop_path" と同じです。違うのは方法だけです。これらの Rails ルート ヘルパーは URL のみを指していますが、メソッドは指していないため、この場合は同じです。ちなみに、メソッドは「post:」ではなく「put:」にする必要があります(フォームヘルパーのパラメーターとして)

于 2012-12-26T17:58:51.000 に答える