Rails 6 路由用于 admin 部分,URL 中带有参数

Rails 6 routing for admin section with arguments in the URL

提问人:whitemystyle 提问时间:4/14/2021 最后编辑:whitemystyle 更新时间:4/15/2021 访问量:166

问:

如何在“/admin”之前使用参数组织 /admin 部分的路由。

例如,/:country_id/:lang_id/admin

路径示例,/ukraine/english/admin

我试过: 作用域路径:“/:country_id/:lang_id/admin”, :as => “admin” do 资源 :cities, controller:'admin/cities'

但是“admin_cities_path”创建了错误的内部链接 <%= link_to city.title, admin_cities_path(city.id) %>

Rails 返回以下 UR:: /1/english/admin/cities 而不是: /乌克兰/英语/admin/cities/1

路线.rb

Rails.application.routes.draw do

  devise_for :users
  devise_for :views

  get 'home/index', to: 'application#index'
  root to: "home#index"

  get '/:id/:lang_id/admin', to: 'admin/admin#index'
  get '/admin', to: 'admin/admin#index'



  scope path:"/:country_id/:lang_id/admin", :as => "admin" do
  #namespace :admin do
      resources :cities, controller:'admin/cities'
      resources :comments  do
          member do
            get 'approve'
            get 'disapprove'
          end
        end
      resources :countries
      resources :industries
      resources :products
      resources :languages
      resources :categories
      resources :companies
  end


  #root "articles#index"
  #get "/admin/countries", to: "countries#index"# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  # resources :countries do
  #   resources :languages
  # end

  resources :countries

  get '/countries/', to: 'countries#index'
  get '/languages/', to: 'languages#index'
  get '/:id/', to: 'countries#show', as: 'localized_country'
  get '/:id/:lang_id/', to: 'languages#show', as: 'localized_language'
  #get '/:id/:lang_id/:category_id/', to: 'categories#show', as: 'localized_category'
  get '/:id/:lang_id/:industry_id/', to: 'industries#show', as: 'localized_industry'
  get '/:id/:lang_id/:industry_id/:category_id/', to: 'categories#show', as: 'localized_category'
  get '/:id/:lang_id/:industry_id/:category_id/:city_id/', to: 'cities#show', as: 'localized_city'

  get '/:id/:lang_id/:industry_id/:category_id/product/:product_id/', to: 'products#show', as: 'localized_product'

  resources :languages, param: :land_id
  resources :products
  resources :industries
  resources :categories, param: :category_id



  resources :products do
    resources :comments
  end
end
Ruby-on-Rails 红宝石

评论

0赞 max 4/14/2021
我不明白您如何期望能够从单个参数生成带有段的 URL。或者为什么你认为需要这种嵌套。
0赞 Mshka 4/14/2021
你已经有任何代码可以分享了吗?route.rb
0赞 whitemystyle 4/14/2021
添加了 routes.rb 的代码

答:

0赞 Kishor Vyavahare 4/14/2021 #1

我只是猜测你想要什么,如果它不满意,请评论一些代码或更多信息来解决它。

   resources :country, path: '' do
    resources :language, path: '' do
      namespace "admin" do
        resource :cities
      end
    end
  end

上面的代码将按以下格式重新生成路径。

new_country_language_admin_cities   GET /:country_id/:language_id/admin/cities/new(.:format)  admin/cities#new
edit_country_language_admin_cities  GET /:country_id/:language_id/admin/cities/edit(.:format)   admin/cities#edit

等等......

评论

0赞 whitemystyle 4/14/2021
嗨,同样的问题,Rails 返回以下 URL:/1/english/admin/cities 而不是:/ukraine/english/admin/cities/1
0赞 Kishor Vyavahare 4/15/2021
您可以使用friendly_id gem: github.com/norman/friendly_id