2011-03-16 43 views
0

我需要讓「放」請求「/用戶/ upload_image」行動。form_remote_for使用把不同的行動

以下代碼:

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

主要生產以下HTML:

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

當我設置:方法=>:放:HTML PARAM,它只會在HTML中設置,而非JavaScript碼。

  1. 我需要有「放」的形式標記內和JavaScript
  2. 我需要有行動,如「/用戶/ upload_image」

怎麼辦呢?

感謝

回答

1

如果你看看下面<form>標籤,你會看到:

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

,由於HTTP不支持PUTDELETE方法。它僅支持GETPOST所以Rails的immitates 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 
+0

是。我懂了。謝謝。我如何自定義:網址?這裏 – AntonAL 2011-03-16 14:50:35

+0

一些更新 – fl00r 2011-03-16 14:58:17

+0

感謝。我已經有工作上傳代碼。但是這個請求是在/ users/update方法中處理的。由於,他們是不同的情景,我需要有一個單獨的行動,呼籲/用戶/ upload_image」唯一的事情,我現在需要的,是在form_remote_for改變操作設置不同:URL簡化版,使任何影響 – AntonAL 2011-03-16 14:59:53