form_remote_for для использования различных действий - PullRequest
0 голосов
/ 16 марта 2011

мне нужно сделать запрос "put" для действия "/ 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 param, он будет установлен только в HTML, а не в коде JavaScript.

  1. Мне нужно «положить» внутри тега формы иJavaScript
  2. Мне нужно действие, например "/ users / upload_image"

Как это сделать?

Спасибо

1 Ответ

1 голос
/ 16 марта 2011

Если вы посмотрите ниже тега <form>, вы увидите:

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

Это потому, что HTTP не поддерживает PUT и DELETE методы.Он поддерживает только GET и POST, поэтому Rails таким образом имитирует метод PUT

UPD

О загрузке файла ajax: Загрузка файла AJAX в Ruby on Rails

чтобы добавить /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 для вас

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...