2015-04-30 44 views
2

我有一個控制器,它預計一個散列與以下項:如何使用permit或require過濾哈希中的鍵值?

{:username,:password,:age} 
params = {"username"=>"john", "password"=>"secret"} 

paramsActionController::Parameters類的對象。現在控制器應該給出一個錯誤「:age」參數丟失。 如何在Rails中使用require/permit來做到這一點?或者還有其他更好的方法來驗證輸入參數在除了strong_parameters之外的Rails嗎?

+0

鏈幾個'require' http://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html#method-i-要求,或建立自己的對象與驗證 – apneadiving

+0

正確我們可以使用需求但使用問題「要求」是我一次只能驗證一個鍵...... :( – user2520522

回答

0

您可以使用許可證爲:

params.require(:user).permit(:name, :password, :age) 

,是你的年齡參數是在您的形式呈現:

<%= form_for @user do |f| %> 
    <%= f.text_field :name %> 
    <%= f.password_field :password %> 
    <%= f.text_field :age %> 

    ..... 
<% end %> 

爲基本行動期待您PARAMS哈希值如下:

params{"user" => {"name": name, "password": password, "age": 13 }} 
+1

你不回答'現在控制器應該給出一個錯誤「:年齡」參數丟失「 – apneadiving

+0

感謝你的回覆,我想說的幾點u:1.我沒有任何視圖部分,它的完全back_end驗證2.我使用NoSql,所以我不能添加任何活動的記錄驗證 所以有什麼辦法對輸入參數進行驗證。 – user2520522

1

我會用你的模型中的一個簡單的驗證方法。例如:

validates :age, presence: true, allow_blank: false 

您還應該允許:在控制器的strong_parameters方法中使用age。正如穆罕默德指出的那樣,這將需要類似這樣的東西:

params.require(:user).permit(:name, :password, :age) 

但這與驗證無關。只是將用戶通過表單提供的參數列入白名單,以防止在創建或更新模型時在屬性的批量分配中發生某些類型的攻擊。

一旦你的參數被列入白名單,你的驗證回調將在創建或保存新對象之前啓動。如果屬性「age」缺失或者爲零,則前面的方法會給出一個驗證錯誤,您可以在@ user.errors.messages中讀取該錯誤,或​​者您的模型的名稱爲。這樣,除非:年齡不是空白,否則不會保存您的對象。

希望這會有所幫助。

+0

正是你提到的是正確的,你的建議也很好,但我有一個問題是方法。我們不能將活動記錄驗證添加到NoS之上在軌道中的ql。請糾正我,如果我錯了.. :) – user2520522

+0

好吧,你沒有提到你使用nosql。坦率地說,我不知道你的問題的答案。我從來沒有使用過rails的nosql數據庫。我通常會發現postgres本地類型,如hstore,在sql框架中給了我足夠的靈活性,以避免使用mongo之類的潛在問題。但是,正如我所說的,我對這些數據庫知之甚少。抱歉。 – Seliestel

+0

沒問題,謝謝你的幫助...... :) – user2520522

相關問題