2017-04-09 82 views
1

我正在使用Rails作爲API服務器,我想知道爲什麼發送到服務器的數據需要嵌套。這似乎是界定則params的首選方式:爲什麼POST數據要嵌套?

def user_params 
    params.require(:user).permit(:first_name, :last_name, :password, :username, :email) 
end 

,這將是相應的JSON發送到創建路線:

{ 
    "user": { 
     "username": "lorem", 
     "first_name": "ipsum", 
     "last_name": "dolor", 
     "password": "sit", 
     "email": "amet" 
    } 
} 

這是爲什麼發佈數據的首選方法是什麼?爲什麼不能在JSON是:

{ 
    "username": "lorem", 
    "first_name": "ipsum", 
    "last_name": "dolor", 
    "password": "sit", 
    "email": "amet" 
} 
+0

這裏沒有RoR的經驗,但對我來說,這看起來像是因爲你實際上需要一個包含其他字段的參數'user'? – Mario

+0

是的!但是,這是如何引導控制器腳手架的。我知道應該有一些理由在自動生成的代碼中執行此操作,並且我想知道原因是什麼。 – theva

回答

5

這些都不是被同時爲您創造一個資源上發送的唯一參數,其它的是:

  1. utf8與價值
  2. authenticity_token用隨機字符串
  3. commit值爲SaveUpdate

所以邏輯非常明顯:Rails將user密鑰中的所有用戶歸屬參數進行分組,因此它更易於閱讀,代碼更易於解釋,並且更容易將相關參數列入白名單。

不僅如此,有時您會嘗試通過一個請求創建多個資源,例如用戶有很多書籍,所以您想要創建一個用戶,同時還要創建一個名爲Nested Resources的書籍,並在那樣的話,它會是這樣的:

{ 
    "user": 
    { 
    "username": "john_don", 
    "books": 
    { 
     "0": 
     { 
     "author_id": 1 
     } 
    } 
    } 
} 

我希望你能明白。