2011-03-26 61 views
1

我是RoR的新手,開始研究典型的'has_many'關聯(即用戶有很多朋友)。我有一切正常工作,但我不喜歡有暴露在URL中的ID。我發現我需要在控制器中添加額外的驗證,以確保用戶手動輸入不同的ID時,ID代表有效的關聯。有關軌道路線和驗證中模型ID的想法

就我個人而言,我希望看到網址中的id並通過其他方式傳遞,但這並非總是可行。資源的淺層嵌套將有助於減少至少需要驗證的ID數量。

這是什麼RoR理念?我還沒有看到這個問題的具體情況。

謝謝

回答

1

如果URL是GET url,那麼URL有參數。

嘗試使用POST參數,這意味着您的網址將不再混亂。請注意,惡意用戶仍然可以使用curl發送構建的POST請求。

+0

這個問題是關於我的情況下,任何人都有興趣(http://stackoverflow.com/questions/2892394/restfully-nesting-resource-routes-with-single-identifiers)。 – tollbooth 2011-03-27 01:01:33

1

我的做法是實施適當的授權。如果用戶請求他不允許閱讀的對象的信息,則應該由授權框架處理。 使用CanCanDeclarative Authorization您可以定義規則來替換控制器中的「手動」(以及容易出錯)檢查。

我喜歡URL中的ID。這就是REST的內容。獲取特定資源的信息,這些資源必須用ID標識。

您可以使用Friendly ID爲了用slug替換整數ID(例如用戶/收費站而不是用戶/ 42)。

1

默認情況下,ror路由默認採用id作爲生成url的關鍵字。如果您不是基於ID的網站粉絲,那麼您可以始終使用to_param模型來覆蓋網址。

def to_param 
    # make sure this field is always present & unique 
    username 
end 

則默認情況下你將開始看到的username代替id裏面的URL

如何找到對象的內部控制器動作

User.find_by_username(PARAMS [:編號])

如果你不想這樣做手動使用slu ge寶石像friendly id