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

在Rails 2.3中是否更改了名称空间路由?

  •  2
  • Kris  · 技术社区  · 16 年前

    我有一个管理名称空间,它为我提供了通常的路径,如管理项目和管理项目,但是它们没有以通常的方式工作。这是我的第一个Rails2.3项目,所以可能相关,但我无法通过谷歌找到任何信息。

    map.namespace(:admin) do |admin|
      admin.resources :projects
    end
    

    奇怪的是,对于一个给定的URL(例如/admin/projects/1),我不需要传入一个对象来获取URL,它不知何故会猜测它们:

    <%= admin_project_path %> # => /admin/projects/1
    

    不用担心,不是真正的问题,只是以前没注意到。

    但如果我像往常一样传递一个物体:

    <%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>
    

    “:id”似乎包含整个对象,因此我尝试直接传递该id,它可以工作:

    <%= admin_project_path(@project.id) %> # => /admin/projects/1
    

    这并不是很糟糕,但是当涉及到表单时,我通常使用[:admin,@object],但是:

    <%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'
    

    所以我不能传入一个ID,因为它需要一个对象类来计算出要使用的正确路由。

    <%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.
    

    我找不到任何错误,这是相当标准的,所以我不确定出了什么问题…

    2 回复  |  直到 16 年前
        1
  •  2
  •   Cody Caughlan    16 年前

    有趣。当你定义一个 to_param 项目方法?例如

    class Project < ActiveRecord::Base
      def to_param
        self.id
      end
    end
    

    这应该是默认值,而这不应该是必需的。但是如果你把它说得很清楚会发生什么呢?尝试添加上述方法,然后返回到最初的方法,即只传递@project

        2
  •  0
  •   Peer Allan    16 年前

    我希望我能在这方面帮助你。我们有一个具有多个名称空间部分的大型应用程序。我们的路由是按照您描述的确切方法定义的,我们正在用对象调用我们的路径助手。不,我们在应用程序中使用ID访问的位置。

    我们的应用程序在Rails 2.1上启动,并通过2.2和2.3进行了转换,但对路由没有重大更改。对不起,我帮不上忙。

    同龄人