0

我知道在 URL 中只包含确定模型对象所需的参数是一种很好的做法。如果我有 2 个模型,帖子和评论......一个帖子有很多评论,一个评论属于一个帖子。评论的 URL 可以是

/comment/:comment_id

并且从关联中我可以确定它属于哪个 Post 但某些 Rails 应用程序需要访问外部资源(例如通过 API)。如果 rails 应用程序需要复制另一个外部源的一部分,那么处理 URL 和路由的正确方法是什么?例如,如果一个帖子有一些评论,评论的 URL 可以是

/post/:post_id/comment/:comment_id

或者

/comment/:comment_id 

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

The only solution I can think of is to make both possible but the user would never know that the short one exists if I make the long one the default. What do you think?

4

1 回答 1

0

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

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

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

无论如何,这是我的 2 美分。我从来不明白为什么人们会冒犯较长的网址。如果它们为您工作,那么不要害怕使用它们!

于 2013-09-21T19:07:31.300 回答