有人可以用明确的方式向我解释,外行人的条款是什么与Ruby on Rails中的映射资源和命名路由有什么关系?

时间:2009-11-26 05:49:24

标签: ruby-on-rails ruby resources routes models

我第一次在我的工作项目中使用Ruby,所以我仍然在学习绳索(并喜欢它的每一分钟)。

虽然我理解route.rb文件中map.connect函数的意义,但我不理解Rails的“资源”和“命名路由”功能。我在这里有我的Rails书并多次阅读,但我仍然没有得到它。我得到的命名路线 - 我认为它们要么是规则,要么是明确定义的,要么是由代码块计算的,但资源对我来说是完全神秘的;我唯一感觉到的就是你只需要一些很酷的东西就可以使用它们,例如能够调用'resource_path'(及其相关的一系列相关方法)。

我目前的项目有:

map.resources :application_forms
map.resources :sections
map.resources :questions
map.resources :seed_answers
map.resources :question_types
map.resources :form_questions
map.resources :rules
map.resources :form_rules

..但是我的Rails书中有一个非常棒的“has_many”和“only”类型的哈希和参数悬挂在它们之间,我无法确切地知道何时应该使用它们,也没有什么好处。

有人能帮我直接吗?

3 个答案:

答案 0 :(得分:9)

命名路线就是这样;附加了名称的路由,以便在您想要生成URL时轻松引用它。除此之外,它可以消除歧义。

资源基本上是您希望操作路由的“事物”。当你定义'sections'是一个资源时,你正在做的是说“我想要一条路线来获取所有部分。我想要一条路线来添加一个新的部分。我想要一条路线来编辑一个现有的部分。我想要一条删除路段的路线。“诸如此类的事情。这些路由指向标准化方法名称,如indexnewedit等。这些路线中的每一条都将根据其名称分配名称;所以现在有一条名为'edit_section'的路线。

:has_many参数可以让你说某种东西有子东西。例如,您可以说map.resources :sections, :has_many => [:questions]。这意味着问题属于某个部分,这将反映在网址和路径中。您将获得'/sections/27/questions/12'之类的网址以及'section_questions'等命名路由。

:only参数说“只为这些操作制作路线”;如果您只想允许列出,查看和添加项目,而不是编辑或删除,则可以使用它。

答案 1 :(得分:1)

老实说,Rails Routing Guide会给你一个很好的解释,就像你能得到的简单措辞一样。只要知道资源路线== RESTful路线就可以了。

答案 2 :(得分:0)

当DHH在2006年的第一个RailsConf中将它引入Rails社区时,我们都在理解资源和REST方面苦苦挣扎,所以难怪你在理解这个概念时遇到了麻烦。

我承认今天对这些概念有更好,更新的解释,但是在大卫的主题演讲之后,我写了一篇blog post,其中我与其他与会者讨论,试图理解并解释它。它可能会对您有所帮助,因为您不会理所当然地了解有关REST的所有内容,因为最近的文章会这样做。