form_remote_for使用put进行不同的操作

时间:2011-03-16 14:43:20

标签: ruby-on-rails forms actionview

我需要向“/ 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 =&gt; :放入:html param,它只能用HTML设置,而不是JavaScript代码。

  1. 我需要在表单标记和JavaScript
  2. 中使用“put”
  3. 我需要采取行动,例如“/ users / upload_image”
  4. 怎么做?

    由于

1 个答案:

答案 0 :(得分:1)

如果您看到<form>标记下方,您会看到:

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

这是因为HTTP不支持PUTDELETE方法。它仅支持GETPOST,因此Rails以这种方式模仿PUT方法

<强> UPD

关于ajax文件uppload:Ruby on Rails AJAX file upload

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

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