我试图围绕基于REST的API来解决概念的最佳方式。 不包含其他资源的平坦资源是没有问题的。 我陷入困境的是复杂的资源。 比如我有一个ComicBook的资源。 ComicBook拥有各种各样的属性,如作者,发行编号,date等。 漫画书也有1..n封面的清单。 这些封面是复杂的对象。 他们包含了很多有关封面,艺术家,date,甚至封面的64位编码图像的信息。 对于漫画书上的GET,我只能返回漫画,以及所有封面,包括base64的图片。 获得一个漫画可能不是一个大问题。 但是,假设我正在构build一个客户端应用程序,该应用程序想要在表中列出系统中的所有漫画。 该表将包含来自ComicBook资源的一些属性,但我们当然不希望显示表中的所有封面。 返回1000本漫画书,每一本都有多个封面,会导致大量的数据通过networking传递,在这种情况下最终用户不需要的数据。 我的本能是使Cover成为资源,ComicBook包含封面。 所以现在Cover是一个URI。 GET漫画现在工作,而不是巨大的封面资源,我们发回每个封面的URI和客户端可以检索封面资源,因为他们需要他们。 现在我在创build新漫画时遇到了问题。 当然我创作至less要有一个封面,其实这可能是一个商业规则。 所以现在我被困住了,我要么迫使客户强制执行业务规则,首先提交封面,获取封面的URI,然后在列表中发布带有该URI的漫画书,或者在漫画书上的POST采取不同的观点资源比吐出来。 POST和GET的传入资源是深度副本,其中传出的GET包含对从属资源的引用。 封面资源可能是必要的,因为我敢肯定,作为一个客户,我想在某些情况下解决封面的方向。 因此,不pipe依赖资源的大小如何,问题都以一般forms存在。 总的来说,您如何处理复杂的资源,而不会强迫客户“知道”这些资源是如何组成的?
我有一个关于form_for和嵌套资源的两部分问题。 比方说,我正在写一个博客引擎,我想把一条评论和一篇文章联系起来。 我已经定义了一个嵌套的资源,如下所示: map.resources :articles do |articles| articles.resources :comments end 评论表单位于文章的show.html.erb视图中,例如: <%= render :partial => "articles/article" %> <% form_for([ :article, @comment]) do |f| %> <%= f.text_area :text %> <%= submit_tag "Submit" %> <% end %> 这给出了一个错误,“被调用的ID为零,这会错误地等。 我也试过了 <% form_for @article, @comment do |f| %> 正确呈现,但将f.text_area关联到文章的“文本”字段而不是注释,并在该文本区域中显示article.text属性的html。 所以我似乎也有这个错误。 我想要的是一个表单,其“submit”将在CommentsController上调用create操作,在params中带有article_id,例如对/ articles / 1 / comments的post请求。 我的问题的第二部分是,创build评论实例的最佳方式是什么? 我在ArticlesController的show动作中创build了一个@comment,所以一个注释对象将在form_for helper的作用域中。 […]