2014-02-16 4 views
0

У меня есть форма с remote: true. Когда форма отправлена, я хочу ответить js, которая выводит сообщения об ошибках, если запись была недействительной, но когда она сохраняется, я хочу перезагрузить страницу, поэтому я использую для этого location.reload(). Тем не менее, я назначаю значение flash[:notice], если запись была сохранена, но я теряю ее после выполнения location.reload(). Есть ли способ, которым я могу выполнять свои флеш-сообщения после location.reload(). Если нет, то каковы мои альтернативы? Благодаря!Потеря значения вспышки после location.reload()

ответ

0

Вы теряете его, потому что перезагружаете страницу.

Зачем вам нужно перезагружать? Если показать новую запись, вы можете просто создать файл create.js.erb, который добавляет или добавляет новую запись.

1

Я думаю, вы не можете. Один из вариантов:

Вместо location.reload() вы можете перенаправить обратно с некоторыми дополнительными параметрами URL.

Например:

В контроллере:

# it's the same like location.reload() but adding 'status=success' extra parameter to url 
... 
render js: "window.location = updateQueryStringParameter('#{request.referer}', 'status', 'success');" 
... 

JQuery:

function updateQueryStringParameter(uri, key, value) { 
    var re = new RegExp("([?|&])" + key + "=.*?(&|$)", "i"); 
    separator = uri.indexOf('?') !== -1 ? "&" : "?"; 
    if (uri.match(re)) { 
    return uri.replace(re, '$1' + key + "=" + value + '$2'); 
    } 
    else { 
    return uri + separator + key + "=" + value; 
    } 
} 

Затем вы можете добавить фильтр для установки вспышки сообщение в зависимости от параметра состояния:

class ApplicationController < ActionController::Base 
    ... 
    before_filter :check_status 
    ... 
    def check_status 
    if params[:status] 
     if params[:status] == 'sucess' 
     flash[:notice] = "Success !!! Congratulations !!!" 
     else 
     ... 
     end 
     redirect_to url_for(params.except(:status)) # take away status parameter from url (if you wish) 
    end 
    end 

Возможно, лучший способ - фильтровать параметр статуса в промежуточном программном обеспечении или в ограничениях маршрутов вместо контроллера.

Смежные вопросы