0

所以这让我很难过,我在路线方面根本不是最好的,但我想要实现的目标似乎很简单。我所拥有的是目前只能由超级用户访问的功能,现在我想将该功能扩展到portal_administrator。现在要访问该页面,您需要一个看起来像这样的 link_to

 = link_to('Data', portal_datum_path(current_portal.id), :id => :super_user_data_link)

用匹配路由

 match '/portal_data/:id', :controller => 'portal_data', :action => 'show', :as => 'portal_datum'

现在这很好用,您最终会得到一个具有 id 参数的 url。在它路由到的页面中使用。事实上,有一个 before 过滤器可以确保有一个 id。

  def load_portal
    @portal = Portal.find(params[:id])
  end

这将使超级用户能够通过查看 url 来查看他所在的门户。现在我将其扩展到用户,我不希望他们看到他们所在的门户 ID,所以我想我会在下面使用一个单一的资源。

 = link_to('Data', portal_data_path, :id => :super_user_data_link)

 match '/portal_data' => "portal_data#show"

所以它路由到同一个地方,但保持 url 干净。但显然这个剂量是有效的。即使我对之前的文件管理器进行硬编码以接受第一个门户,它也会抛出错误

No route matches {:controller=>"portal_data", :action=>"show"}

但如果我在那儿耙我的路线?

我确定我做错了什么很明显有什么想法吗?

4

1 回答 1

0

我所要做的就是使 :id 成为一个可选参数,就像这样......

match '/portal_data(/:id)'

它有效:) 然后在控制器中寻找......

def load_portal
  @portal = Portal.find(params[:id] || current_portal.id)
end

...如果参数中没有,则帐户上的门户 ID。

于 2012-09-27T09:35:08.763 回答