Rails路由 - link_to奇异资源与params

时间:2012-09-26 12:44:29

标签: ruby-on-rails routing

因此,当涉及到路线时,这对我来说并不是最好的,但我想要实现的目标看起来很简单。我所拥有的是一个目前只能由超级用户访问的功能,现在我想将该功能扩展到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参数的网址。它在路由到的页面中使用。实际上有一个前置过滤器可以确保有一个id。

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

这将使susperuser只通过查看URL就能看到他所在的门户网站。既然我正在向用户扩展这个我不希望他们看到他们所在的门户网站ID,所以我想我会使用以下的单一资源。

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

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

所以它路由到同一个地方,但保持网址清洁。但显然这个剂量有效。即使我硬编码前文件管理器接受第一个门户网站它jsut抛出错误

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

但如果我把路线耙到那里呢?

我确定我做错了什么是明显的想法?

1 个答案:

答案 0 :(得分:0)

我所要做的就是将:id作为可选参数,如此......

match '/portal_data(/:id)'

它的工作原理:)然后在控制器中寻找......

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

...如果参数中没有一个门户ID,则该帐户上有门户网站ID。