我是RoR的新手并开始研究典型的'has_many'关联(即用户有很多朋友)。我有一切正常工作,但我不喜欢在网址中公开ID。我发现我需要在我的控制器中添加额外的验证,以确保在用户手动输入不同的ID时,id代表有效的关联。
我个人希望看到网址中的ID并通过其他方式传递,但这并不总是可行的。浅层资源嵌套将有助于减少至少需要验证的ID数量。
RoR的理念是什么?我没有看到任何针对这个问题的具体内容。
由于
答案 0 :(得分:1)
如果URL是GET网址,则URL包含参数。
尝试使用POST参数,这意味着您的网址将不再混乱。请注意,恶意用户仍然可以使用curl发送一个补充的POST请求。
答案 1 :(得分:1)
我的方法是实施适当的授权。如果用户请求不允许读取的对象的信息,则应由授权框架处理。 使用CanCan或Declarative 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宝石