2013-09-21 58 views
0

据我所知,最好的做法是只在URL中包含确定模型对象所需的参数。 如果我有2个模型,发布和评论...一个帖子有很多评论和评论属于一个职位。注释行的URL可以Rails路由,深层嵌套的外部资源

/comment/:comment_id 

,并从社团我可以确定它张贴属于但是 一些Rails应用需要访问外部资源(通过API为例)。如果rails应用程序需要复制另一个外部源的一部分,那么处理URL和路由的正确方法是什么? 例如,如果一个职位有一些评论,对评论的URL可以是

/post/:post_id/comment/:comment_id 

/comment/:comment_id 

后者有一个缺点是,我不能确定它张贴属于如果外部来源的API不能确定这会导致通过应用程序导航时出现问题,但它是一个简短的URL,并允许用户轻松操纵URL来获得另一个评论(我认为这是一个优势)。同时使用第一个(长)链接会使URL长这么久,但我可以知道它属于哪个帖子。

我能想到的唯一解决方案是使两者都成为可能,但用户永远不会知道如果我将长的默认值存在,那么短的存在。你怎么看?

回答

0

我自己总是使用较长/拼写的版本。我不介意它很长,只有当你在这里发现时才能看到好的东西。我也认为这是一个优势,因为那么你可以做这样的事情:

post = Post.find_by_id(params[:post_id]) 
comment = post.comments.find_by_id(params[:id]) 

问题的关键是,你不能走“comment钓鱼”这种方式。您必须拥有正确的post上下文才能获得特定的comment。如果评论并不敏感,这可能无关紧要,但网络应用程序中可能有很多东西。因此,通过根对象(如post)查找范围可以快速进行权限检查,可以重复使用,而无需检查父对象。

无论如何,这是我的2美分。我从来都不明白为什么人们会为更长的网站冒险。如果他们为你工作,那么不要害怕使用它们!