Rails路由别名

| 我有一个名为
Spaces
的模型,它具有不同类型的地方...例如酒吧,餐厅等。它具有相同的列,相同的模型,控制器等。没有花哨的STI,我只有一个名为
Space_type
的字段想确定一条别名路由。 不是
domain.com/spaces/12345
而是would3ѭ或
/clubs/12345
目前我有:
  resources :spaces do
    collection do
      get :update_availables
      get :update_search
      get :autocomplete
    end
    member do
      post :publish
      post :scrape
    end
    resources :photos do
      collection do
        put :sort
      end
    end

    resources :reviews
  end
另外,有没有一种方法可以使我每次使用space_url都可以确定要使用哪个?     
已邀请:
路线不是直接与模型进行交互的方法。因此,只要编写一条标准路线,就可以使事情正常。例如,要将
/bars/12345
/clubs/12345
换成
spaces_controller
(或任何控制器名称),可以创建如下路线:
scope :path => \'/bars\', :controller => :spaces do
  get \'/:id\' => :show_bars, :as => \'bar\'
end  

scope :path => \'/clubs\', :controller => :spaces do
  get \'/:id\' => :show_clubs, :as => \'clubs\'
end  
    
# routes.rb
match \"/:space_type/:id\", :to => \"spaces#show\", :as => :space_type

# linking
link_to \"My space\", space_type_path(@space.space_type, @space.id)
会生成以下网址:
/bars/123
/clubs/1
...任意have13ѭ 而且看起来STI wold可以使这项工作变得更加干净;) UPD 您还可以添加约束以防止某些冲突:
match \"/:space_type/:id\", :to => \"spaces#show\", :as => :space_type, :constraints => { :space_type => /bars|clubs|hotels/ }
是的-最好将这次溃败放在所有其他路线的底部 您也可以将其包装为辅助程序(并重写默认的
space_url
):
module SpacesHelper
  def mod_space_url(space, *attrs)
    # I don\'t know if you need to pluralize your space_type: space.space_type.pluralize
    space_type_url(space.space_type, space.id, attrs)
  end
end
    

要回复问题请先登录注册