2014-02-16 88 views
0

我有一個形式remote: true。提交表單時,我想用js作出迴應,如果記錄無效,則會顯示錯誤消息,但保存時,我想重新加載頁面,因此我正在使用location.reload()。但是,如果記錄已保存,我將爲flash[:notice]分配一個值,但在執行location.reload()後我將丟失該值。有什麼辦法可以在location.reload()之後獲得我的Flash消息。如果不是,我的替代品是什麼?謝謝!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 

也許更好的方法是在中間件或路由約束中過濾狀態參數而不是控制器。