代码之家  ›  专栏  ›  技术社区  ›  Ash

有人能用通俗易懂的术语向我解释一下RubyonRails中的映射资源和命名路由是什么协议吗?

  •  3
  • Ash  · 技术社区  · 15 年前

    在我的工作中,我第一次在一个项目中使用Ruby,所以我仍然在学习一些技巧(并且热爱其中的每一分钟)。

    当我明白 map.connect 函数在route.rb文件中,我不理解rails的“resources”和“named route”特性。我有我的轨道书在这里,读了好几遍,但我还是不明白。我得到的命名路由-我认为它们要么是规则,要么是明确定义的,要么是由代码块计算的,但是这些资源对我来说是一个完全的谜;我从它们中收集到的唯一信息是,如果你想让一些很酷的东西工作,比如能够称之为“资源路径”(及其令人敬畏的相关内容),你只需要它们。方法家族)。

    我目前的项目有:

    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书有这样一个很棒的“有很多”和“只有”类型的散列和参数挂在它们上面,我不能精确地计算出什么时候应该使用它们,也不能计算出有什么好处。

    有人能把我弄直吗?

    3 回复  |  直到 15 年前
        1
  •  9
  •   inklesspen    15 年前

    命名路由就是这样的;一个附加了名称的路由,这样当您想要生成一个URL时,就可以很容易地引用它。除此之外,它还可以消除歧义。

    资源基本上是一个“东西”,你想有路线操纵。当你定义“部分”是一个资源时,你所做的就是说“我想要一个路径来获取所有部分”。我想要一条添加新分区的路线。我想要一个路线来编辑现有的部分。我想要一个删除分区的路径。这些路径指向标准化方法名称,例如 index , new , edit 等等。这些路由中的每一个都将根据其名称进行分配;因此现在有一个名为 'edit_section' .

    这个 :has_many 参数允许您说某种事物具有子事物。例如,你可以说 map.resources :sections, :has_many => [:questions] . 这意味着一个问题属于一个部分,这将反映在URL和路由中。你会得到如下网址 '/sections/27/questions/12' 命名的路线 'section_questions' .

    这个 :only 参数表示“仅为这些操作创建路由”;如果只允许列出、查看和添加项目,而不允许编辑或删除,则可以使用该参数。

        2
  •  1
  •   Andy Gaskell    15 年前

    老实说 Rails Routing Guide 会给你一个很好的解释,尽可能简单的措辞。只要知道资源路由==restful route,你就可以走了。

        3
  •  0
  •   Casper Fabricius    15 年前

    2006年,当DHH在第一次RailsConf向Rails社区介绍它时,我们都在努力理解资源和休息,所以难怪您很难理解这个概念。

    我承认今天对这些概念有了更好、更及时的解释,但在大卫的主题演讲之后,我写了一篇 blog post 在这篇文章中,我通过与其他与会者的讨论,试图理解和解释它。这可能会对你有所帮助,因为你对休息的了解并不像最近的文章那样理所当然。