0

我需要向“/users/upload_image”操作发出“放置”请求。

以下代码:

<% 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 参数时,它将仅在 HTML 中设置,而不是 JavaScript 代码。

  1. 我需要在表单标签和 JavaScript 中添加“放置”
  2. 我需要采取行动,例如“/users/upload_image”

怎么做 ?

谢谢

4

1 回答 1

1

如果你看下面<form>的标签,你会看到:

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

那是因为 HTTP 不支持PUTDELETE方法。它只支持GETPOST所以 Rails 以这种方式模仿 PUT 方法

UPD

关于ajax文件上传:Ruby on Rails AJAX文件上传

要添加/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

现在您可以使用upload_image_user_path(@user)它将/users/@user.id/upload_image为您生成 url

更新 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 回答