подкатегории и категории рельсы friendly_id - PullRequest
0 голосов
/ 15 ноября 2018

Не могу заставить friendly_id работать с моими категориями и подкатегориями.Я также использую гем friendly_id.

Вот мой контроллер категорий

class CategoriesController < ApplicationController

    def index
        @categories = Category.all
        @oval = @categories[0]
        @atv = @categories[1]
        @boat = @categories[2]
        @fab = @categories[3]
        @chassis = @categories[4]
        @classic = @categories[5]
        @dirt = @categories[6]
        @dragracing = @categories[7]
        @audio = @categories[8]
        @engine = @categories[9]
        @tune = @categories[10]
        @enginecom = @categories[11]
        @exhaust = @categories[12]
        @golfcart = @categories[13]
        @hotrod = @categories[14]
        @karts = @categories[15]
        @modern = @categories[16]
        @motorcycle = @categories[17]
        @muscle = @categories[18]
        @offroad = @categories[19]
        @racingitem = @categories[20]
        @accessories = @categories[21]
        @position = @categories[22]
        @racingeq = @categories[23]
        @roadracing = @categories[24]
        @safety = @categories[25]
        @snowmobile = @categories[26]
        @tw = @categories[27]
        @tools = @categories[28]
        @rvs = @categories[29]
        @tractor = @categories[30]
        @trailer = @categories[31]
        @transmission = @categories[32]
        @truckpart = @categories[33]
        @drift = @categories[34]
        @import = @categories[35]
    end

Например, мой URL прямо сейчас - localhost: 3000 / category / 4 / subcategories / 27

Я хочу, чтобы это было

localhost: 3000 / Categories / Dragracing / Subcategories / Pro-Mod

Вот мои маршруты

    Rails.application.routes.draw do


  resources :channels
  resources :discussions do
    resources :replies
  end
  resources :comments
  resources :blogs
  mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
  mount ActionCable.server => '/cable'

  get 'users/show'
  get 'about', to: 'pages#about'
  get 'directory', to: 'pages#directory'
  get 'contact', to: 'pages#contact'
  get 'privacy', to: 'pages#privacy'
  get 'faq', to: 'pages#faq'
  get '/myads', to: 'posts#myads'
   get 'partner', to: 'pages#partner'
  get '/sitemap' => 'sitemap#index', defaults: {format: "xml"}
  root 'categories#index'







  devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'register' }, controllers: { registrations: "registrations"}
  resources :users
  resources :mes
  resources :pricing, only:[:index]
  resources :posts 
  resource :subscription

  resources :categories do 
        resources :subcategories
  end
end

1 Ответ

0 голосов
/ 16 ноября 2018

Описание маршрута, который вы пытаетесь использовать:

# /categories/:category_id/subcategories/:id

Это означает, что все, что вы отправляете вместо :category_id, будет доступно в вашем контроллере как params[:category_id], то же самое для :id => params[:id].

Итак, если вы отправите /categories/dragracing/subcategories/pro-mod, ваши параметры будут такими:

{ 'category_id' => 'dragracing', 'id' => 'pro-mod' }

Поскольку ваш код в настоящее время стоит, эта конечная точка будет перенаправлена ​​на subcategories#show.

# category_subcategory GET /categories/:category_id/subcategories/:id(.:format)  subcategories#show

Так что для этого вам нужен контроллер.Вам не нужно отправлять id s или номера в URL, вам нужно только правильно обработать их:

class SubcategoriesController < ApplicationController
  def show 
    @category = Category.friendly.find params[:category_id] # dragracing
    @subcategory = Subcategory.friendly.find params[:id] # pro-mod
  end
end
...