关于铁路路线和验证中的模型ID的想法

时间:2011-03-26 06:13:54

标签: ruby-on-rails validation model routes

我是RoR的新手并开始研究典型的'has_many'关联(即用户有很多朋友)。我有一切正常工作,但我不喜欢在网址中公开ID。我发现我需要在我的控制器中添加额外的验证,以确保在用户手动输入不同的ID时,id代表有效的关联。

我个人希望看到网址中的ID并通过其他方式传递,但这并不总是可行的。浅层资源嵌套将有助于减少至少需要验证的ID数量。

RoR的理念是什么?我没有看到任何针对这个问题的具体内容。

由于

3 个答案:

答案 0 :(得分:1)

如果URL是GET网址,则URL包含参数。

尝试使用POST参数,这意味着您的网址将不再混乱。请注意,恶意用户仍然可以使用curl发送一个补充的POST请求。

答案 1 :(得分:1)

我的方法是实施适当的授权。如果用户请求不允许读取的对象的信息,则应由授权框架处理。 使用CanCanDeclarative Authorization,您可以定义用于替换控制器中“手动”(并且容易出错)检查的规则。

我喜欢网址中的ID。这就是REST的意义所在。获取特定资源的信息,这些资源必须使用ID进行识别。

您可以使用Friendly ID来替换slug的整数ID(例如users / tollbooth而不是users / 42)。

答案 2 :(得分:1)

默认情况下,ror路由默认使用id作为生成网址的密钥。如果您不是基于ID的网址的粉丝,那么您可以使用模型内的to_param来覆盖网址。

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

然后默认情况下,您会在网址

中看到username而不是id

如何在控制器动作中找到对象

  

User.find_by_username(PARAMS [:ID])

如果您不想手动使用像friendly id

这样的slug宝石