2016-10-25 25 views
3

的數組,如果我有一個用戶如何做強參數與對象

def user_params 
    params.require(:user).permit(:name, :age) 
end 

我得到了下來。我想批量創建用戶。這樣用戶就可以填寫用戶列表(理論上是無限),他們會進來爲:

[{name: "name", age: 12},{name: "name", age: 22},{name: "name", age: 32}] 

的問題是,我該如何使用,強有力的參數?我知道我可以循環訪問數組並創建記錄,我明白了。我的理解是,強大的參數是一個好主意,安全明智。

什麼是保護我的強烈參數?如果我只是繞過一系列的用戶,我會如何開放自己?我怎樣才能做到這一點,無論是強烈的參數還是其他方法?

回答

3

爲了保護應用程序不受mass assignment漏洞影響,強參數(引入到rails 4中)的整個要點。例如,假設您有一個User模型,並且它具有admin屬性。如果你在理論上使用質量分配,那麼如果你沒有過濾掉某些方法,那麼有人可能會爲admin屬性輸入一個值;見下文

class UserController < ApplicationController 

    def create 
    #{name: 'Joe', score: 7, title: 'Mr', admin: true} params hash 
    User.create(params) 
    end 
end 

現在,如果一些如何在這些價值觀,他們只是做自己和管理,可以爲他們做的,請通過您的應用程序的用戶。所以這就是爲什麼你會用強參數來做到這一點。

class UserController < ApplicationController 

    def create 
    User.create(user_params) 
    end 

    def user_params 
    params.require(:name).permit(:title, :score) #noticed admin is not allowed 
    end 
end 

我們創建具有較強的PARAMS多個記錄,你可以這樣做

class UserController < ApplicationController 

    def create 
    user_params[:users].each do |u| 
     User.create(u) 
    end 
    end 

    def user_params 
    params.permit(:users, array: [:name, :age]) 
    end 
end 
+0

這行不通。 '''NoMethodError(undefined method'permit'for# 您的意思是?''' –

+0

更新了答案 –

+0

我一直在掙扎,我認爲正確的答案是使用' params.permit(:users => [:name,:age])'。這個答案發生的任何其他人只是一個FYI。 – Wes