【问题标题】:simple rails routing using resources使用资源的简单 Rails 路由
【发布时间】:2012-05-27 09:51:09
【问题描述】:

我无法理解路由。另外,我正在尝试了解 routes.rb 中的资源(和资源)关键字。

我创建了 home_controller.rb,并将“resources :home”放在 routes.rb 中。我跑了 rake 路线,我可以看到所有这些东西,但我不知道如何处理它。我只是想显示一个带有表单的页面,比如 index.html.erb,提交表单,在控制器中执行一些操作,然后再次显示完全相同的页面。

我想我想调用一个 PUT "/home" 或其他东西,但我不确定我的 href 在 erb 页面中应该是什么样子。

那么,home_controller.rb 中的什么方法会捕获该提交?

那么,我是否应该重定向回 index.html.erb?

我尽量不使用脚手架或生成器,以便了解发生了什么。任何帮助表示赞赏。顺便说一句,轨道 3。

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    以下是您开始所需的简要说明:

    1. rails 应用程序中的每个 HTTP 请求都被路由到一个控制器方法。该控制器方法通过呈现某些内容或发出 302 重定向(这会导致浏览器发出不同的请求)来满足请求。

    2. ROR 中的路由描述了每个 HTTP 请求如何映射到每个控制器方法。 HTTP 请求基于两个属性进行映射:请求的 urlHTTP 动词GETPOSTPUT 等)。

    3. 1234563它们如下:

    /homes 上的 HTTP GET 网址

    • 映射到index 方法
    • 通常用于列出所有家庭记录

    HTTP GET /homes/1 网址

    • 映射到show方法
    • 通常用于显示带有id = 1的家庭记录

    /homes/new 上的 HTTP GET 网址

    • 映射到new 方法
    • 通常用于渲染表单以创建新的家庭记录

    /homes 上的 HTTP POST 网址

    • 映射到create 方法
    • new 表单的提交位置
    • 用于创建新的家庭记录
    • 通常以重定向响应

    /homes/1/edit 上的 HTTP GET 网址

    • 映射到edit 方法
    • 通常用于呈现用于编辑家庭记录的表单id=1

    /homes/1 上的 HTTP PUT 网址

    • 映射到update 方法
    • edit 表单提交到的位置
    • 用于编辑记录id=1
    • 通常以重定向响应

    /homes/1 上的 HTTP DELETE 网址

    • 映射到delete 方法
    • 通常用于销毁带有id=1的记录
    • 通常以重定向响应

    【讨论】:

    • 谢谢!好的,所以我有一个命名路线:匹配 'home/update' => 'home#update', :as => :home_update 然后我的表单中有一个链接:。这会在控制器中触发我的“显示”方法,但是 @_params 为零。如何提交它以使 @_params 不会为零?顺便说一句,这: 在我的控制器中调用“index”方法,并带有适当的 @_params 哈希,因此使这个提交按钮调用“show”方法会起作用。谢谢!
    【解决方案2】:

    太简单了。请参阅比我们的答案更详细的 Rails 文档。见

    1. http://guides.rubyonrails.org/getting_started.html#rest
    2. http://guides.rubyonrails.org/routing.html

    【讨论】:

      【解决方案3】:

      简而言之,resources 关键字指定您有一个对象(如用户、文章、帖子、评论等),您希望对其执行 Create Read Update 和 Delete 操作。它指定了 7 个操作,称为 RESTful 操作,可让您列出对象(索引)、更新(编辑、更新)、创建(新建、创建)或删除(销毁)。

      这对应于控制器中的 7 个操作和 4 个视图文件(创建、更新和删除通常不会有自己的视图)。

      rake 路由吐出路由、它们的路径和它们的路径助手。因此,您可以通过

      链接到索引操作/页面
      <%= link_to 'New Article', new_article_path %>
      

      或其他各种用途,使您不必对可能随您的设计而改变的路径进行硬编码。

      听起来,根据您的设计,您不需要全部 7 个操作。您只需要显示一个表单并根据输入的内容创建模型对象。所以你可能会这样做

      resources :home, only => [:new, :create]
      

      您将在哪里显示新表单并在创建时将记录插入数据库。

      【讨论】:

      • 感谢您的深入解释!
      猜你喜欢
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多