2015-02-08 2 views
0

Хорошо, так что быстро, я использую плагин для загрузки файлов http://plugins.krajee.com/file-input, чтобы загрузить мои изображения. Плагин ожидает какой-то ответ от сервера, и я хочу отправить обратно пустой json-объект.Перенаправление, а затем визуализация

Но когда изображения загружаются, мне также необходимо немедленно перенаправить в другое место, чтобы люди могли вносить изменения в заказ.

Rails говорит, что я не могу использовать рендеринг и перенаправление, но говорит, что я могу перенаправить и вернуться. Как перенаправить и вернуть пустой объект json?

def create 
if !params[:images].nil? 
    package = Package.first 
    @photos = Array.new 
    @order = current_user.orders.new 
    @order.save 

    @order.order_items.each{|d| d.delete} #Stupid hack to prevent creation of fake order items. Don't know what is causing this yet 

    params["images"].each do |i| 
    photo = current_user.photos.create 
    photo.write(i.original_filename, i.read) 
    photo.save 
    @order.order_items.create(photo_id: photo.id, size_id: package.size_id, material_id: package.material_id) 

    end 
    redirect_to edit_order_path(@order) and return 


else 
    flash[:danger] = "Please select at least one photo to upload" 
    redirect_to upload_photos_path 
end 

конец

+0

, когда в сообщении docs/error указано «redirect and return», они означают только возврат из текущего метода - единственным ответом, который получает браузер, является перенаправление. Вероятно, вам понадобится код на стороне клиента для перенаправления. –

+0

Ahh, я думал, что возвращение было похоже на возвращение php. Всё, что я, разработчик php, просто встаю, чтобы помочь кому-то в коде RoR. Но позвольте мне посмотреть, что я могу сделать на стороне клиента для перенаправления. –

ответ

0

Если загрузка плагина вы используете ожидает ответа JSON, и вы хотели бы перенаправить после успешной загрузки, то вам необходимо сделать это на стороне клиента.

Если вы не используете Rails 4 или Turbolinks, вы можете просто перенаправить через window.location.replace. Из кода Rails это выглядит, как вы партия загрузка в этом случае вы хотите назначить функцию обратного вызова в filebatchuploadsuccess случае согласно the docs

Пример:

$('#fileinputid').on('filebatchuploadsuccess', function(event, data, previewId, index) { 
    // files have been successfully uploaded, redirect 
    window.location.replace('/your_path_here'); 
}); 

Если вы используете Turbolinks, то выше код будет точно такой же, за исключением того, что вместо window.location.replace, вы можете использовать Turbolinks.visit

Пример:

$('#fileinputid').on('filebatchuploadsuccess', function(event, data, previewId, index) { 
    // files have been successfully uploaded, redirect 
    Turbolinks.visit('/your_path_here'); 
}); 
+0

Это должно сработать ... проблема в том, что я хочу перенаправить пользователя на страницу, которая ожидает идентификатор заказа как параметр ... теперь, так как я делаю рендеринга как render: json => @order, как мне получить доступ к этому объекту json, поэтому я могу затем зайти в голову и перенаправить их на страницу? Я думал, что это будут данные, но их там нет. –

+0

Я понял это ... мне пришлось получить доступ к data.response.id. спасибо –

+0

Можете ли вы согласиться с моим ответом, если это помогло вам с вашим оригинальным вопросом? Благодарю. –