0

「/users/upload_image」アクションに対して「put」リクエストを行う必要があります。

次のコード:

<% form_remote_for @user, :url => "/users/upload_image?id=#{@user.id}", :method => :put, :html => { :multipart => true } do |upload_form| %>
    <%= upload_form.file_field :avatar %>
<% end %>

次のHTMLを生成します。

<form action="/users/1234567" method="post" onsubmit="$.ajax({data:$.param($(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('HMkaYvfHyyYR1jGpVPkyLPfkPacqvTvtHjgDowzwzuY='), dataType:'script', type:'post', url:'/users/1234567'}); return false;">

:method =>:put in:html paramを設定すると、JavaScriptコードではなく、HTMLでのみ設定されます。

  1. フォームタグとJavaScriptの中に「置く」必要があります
  2. 「/users/upload_image」のようなアクションが必要です

どうやってするの ?

ありがとう

4

1 に答える 1

1

<form>タグの下を見ると、次のように表示されます。

<input name="_method" type="hidden" value="put" />

これは、HTTPがメソッドをサポートPUTしていないためです。DELETEサポートのみGETPOSTあるため、Railsはこの方法でPUTメソッドを模倣します

UPD

ajaxファイルのアップロードについて: Ruby onRailsAJAXファイルのアップロード

パスを追加する/users/:id/upload_imageには、ルートとコントローラーを編集する必要があります。

# routes to get /users/:id/upload_image
map.resources :user, :member => {:upload_image => :put}

# users_controller
def upload_image
  @user = User.find(params[:id])
  ...
end

今、あなたはあなたのためにURLをupload_image_user_path(@user)生成することを使用することができます/users/@user.id/upload_image

UPD 2

取得したい場合/users/upload_image?user_id=XXX

# config/routes.rb
map.resources :user, :collection => {:upload_image => :put}

# app/controllers/users_controller.rb
def upload_image
  @user = User.find(params[:user_id])
  ...
end
于 2011-03-16T14:47:39.537 に答える