我需要向“/ 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()) + '&authenticity_token=' + encodeURIComponent('HMkaYvfHyyYR1jGpVPkyLPfkPacqvTvtHjgDowzwzuY='), dataType:'script', type:'post', url:'/users/1234567'}); return false;">
当我设置:method =&gt; :放入:html param,它只能用HTML设置,而不是JavaScript代码。
怎么做?
由于
答案 0 :(得分:1)
如果您看到<form>
标记下方,您会看到:
<input name="_method" type="hidden" value="put" />
这是因为HTTP不支持PUT
和DELETE
方法。它仅支持GET
和POST
,因此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