【问题标题】:Rails restful namespaces, resources... newbie questionRails 宁静的命名空间,资源......新手问题
【发布时间】:2010-07-23 20:16:15
【问题描述】:

我正在尝试使用具有安静路径的嵌套控制器,以便我有条不紊等。到目前为止,这是我的 routes.rb 的副本:

 map.root :controller => "dashboard"

  map.namespace :tracking do |tracking|
    tracking.resources :companies
  end

  map.namespace :status do |status|
    status.resources :reports
  end

指向子控制器路径的链接现在可以正常工作,

<%= link_to "New Report", new_status_report_path, :title => "Add New Report" %>

但是当我试图映射到父控制器的索引路径时,我的问题接踵而至。

<%= link_to "Status Home", status_path, :title => "Status Home" %>

当我加载带有链接的页面时,我最终得到了这个:

undefined local variable or method `status_path' 

我的路线是否为这种链接设置正确?

更新:我应该补充一点,没有数据与父“状态”控制器相关联。它仅充当与状态相关的其余控制器的类别占位符,例如:报告。

【问题讨论】:

    标签: ruby-on-rails nested-routes


    【解决方案1】:

    如果您希望 /status 转到状态控制器,它应该是资源,而不是命名空间。您以几乎相同的方式嵌套资源:

    map.resource :status do |status|
      status.resources :reports
    end
    

    【讨论】:

    • 也许我对命名空间是什么感到困惑,但我的“状态”类别没有任何直接关联的数据。为了组织的缘故,它只是一个占位符类别。我要做的只是让它为该类别呈现一个登录页面,其中包含指向报告等内容的链接。
    • 资源不必有与之关联的数据。如果你想在“/status”有一个页面,你必须把它路由到某个地方。如果你想让你的路由保持安静,你应该像上面一样创建一个 StatusesController 并将 status 设置为一个单一的资源。然后 /status 会转到 StatusesController 的 show 方法。另一方面,有时应用程序会有一个 PagesController 用于所有不适合作为资源路由的页面,您可以像 map.status "/status", :controller =&gt; :pages, :action =&gt; :status 一样路由它
    【解决方案2】:

    命名空间不是资源。

    map.resources :statuses do |status|
      status.resources :reports
    end
    

    此外,您对 status_path 的调用需要一个 ID。

    status_path(:id =&gt; @status.id)

    status_path(@status)

    【讨论】:

    • 我的状态不是资源,报告才是。我的项目中没有状态 ID 这样的东西。
    • 那么请更新您的帖子,以便问题提及您正在尝试使用“status_path”完成什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2011-07-06
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多