0

我有一个名为MeController. 它有一堆动作,比如spacesprojects

spaces操作执行以下操作:

  def spaces
    @spaces = current_user.spaces

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @note }
    end
  end

该视图仅呈现另一个索引模板,例如:

<%= render :template => "spaces/index" %> 

这完美地工作,但现在奇怪的部分开始了......:S

这是project动作:

  def projects
    @projects = current_user.projects

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @projects }
    end
  end

该视图还呈现一个索引模板:

<%= render :template => "projects/index" %> 

但对于项目,我收到以下错误:

Routing Error

No route matches {:action=>"edit", :controller=>"spaces", :id=>nil}

我只是不明白为什么它应该是动作编辑和控制器空间的例行错误。:/

这是我的路线:

# Profiles & Current User
  resources :profiles

  get "me" => "profiles#show", :as => "current_user"
  get "me/spaces", :as => "current_user_spaces"
  get "me/projects", :as => "current_user_projects"
  get "me/tasks", :as => "current_user_tasks"
  get "me/notes", :as => "current_user_notes"
  get "me/discussions", :as => "current_user_discussions"
  get "me/files", :as => "current_user_files"

  # Permissions
  resources :permissions

  resources :spaces do
    resources :projects do
      resources :tasks
      resources :notes
    end
  end

  devise_for :users

  root :to => redirect("/me/spaces")

希望有人给我一个提示!:)

4

1 回答 1

1

所以我的猜测是:

在您的模板(项目/索引)中,您正在使用 url 帮助程序,例如url_forlink_to带有指向特定项目的链接。问题是项目在您的空间资源中具有嵌套路由。这就是为什么当您希望它生成项目的 url 时,您必须为任何 url 助手提供对空间和项目的引用。

如果 url 助手不知道如何构造 url,也会抛出 RoutingError。

这是一个长镜头,但我希望它有所帮助。

于 2013-08-15T10:38:23.433 回答