2013-10-31 37 views
0

我有一個包含幾個URL參數的頁面,這些參數不是用於排序和過濾的模型屬性。目前我試圖在控制器中驗證它們,如this question,但是在驗證參數是否在預期值集合中時遇到問題。在Rails中驗證非模型參數是期望值

before_filter :validate_params, :only => :index 

def validate_params 
    if !params[:type] = 'any' || !params[:type] = 'up' || !params[:type] = 'down' 
    params[:type] = 'any' 
    end 
end 

在這種情況下,即使參數是'up'或'down',值總是'any'。

回答

0

你應該使用==!=,而不是=

=是分配和==!= comapre它是比較

def validate_params 
    if params[:type] != 'any' || !params[:type] != 'up' || !params[:type] != 'down' 
    params[:type] = 'any' 
    end 
end 

OR

!['any', 'up', 'down'].include?(params[:type]) 
+0

並且在params之前不要使用'!'。 '!some_value'是布爾值不是字符串 – gotva

+0

好點...對不起,糾正我的答案..謝謝:) –

+0

謝謝,我接受了這個答案,因爲它也展示瞭如何減少我原來的代碼 – Matt

0

好,如果你想如果params [:type] =='up',那麼它不是params [:type] = ='down',所以它會一直設置爲任何因爲你正在使用||。嘗試使用& &代替

if !params[:type] == 'any' && !params[:type] == 'up' && !params[:type] == 'down' 
如果你想設置一個PARAMS

[:類型]這是不同的,任何,同比增長ordown,還可以使用==

0

的情況可能是這樣的,

before_filter :validate_params, :only => :index 

def validate_params 
    if params[:type] != 'any' || params[:type] != 'up' || params[:type] != 'down' 
    params[:type] = 'any' 
    end 
end