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

处理铁路中不明确的路线

  •  1
  • Lawrence  · 技术社区  · 14 年前

    这是我的困境:我有两种类型的路由,它们在语义上非常不同,应该去不同的控制器。

    ny/new-york/brooklyn/cleaners # should go to a list of cleaners for a neighborhood
    ny/new-york/cleaners/mrclean  # should go to an individual cleaner's page
    

    在路由决策中是否可能包含访问ActiveRecord模型的任意方法?我使用的是Rails 2.3.8。

    1 回复  |  直到 14 年前
        1
  •  5
  •   David    14 年前

    编辑 : 动态服务的新答案

    看看这个 blog entry 似乎可以在路由中使用ActiveRecords。

    service_names = Service.all.map(&:short_name) # assuming the property 'short_name' is the value used in urls  
    service_names.each do |service_name|
      map.connect ':state/:city/#{service_name}/:company' :controller => ‘company’, :action => ‘show’   # to show the company's page
      map.connect ':state/:city/:neighborhood/#{service_name}_finder' :controller => ‘company_finder’, :action => ‘find’ # to list the companies for the given service in a neighborhood
    end
    

    这仍然可以防止冲突,因为某个服务的路由在某个邻居的路由之前


    老掉牙的回答

    你不能用下面两条路吗?

    map.connect ':state/:city/cleaners/:cleaner' :controller => ‘cleaners’, :action => ‘show’   # to show the cleaner's page
    map.connect ':state/:city/:neighborhood/cleaners' :controller => ‘cleaner_finder’, :action => ‘find’ # to list the cleaners of a neighborhood
    

    在控制器中,应该能够使用params[:state]、params[:city]等检索:state、:city和others值。

    把:state/:city/cleaners/:cleaner放在第一行应该可以避免歧义。