【问题标题】:subcategories and categories rails friendly_id子类别和类别 rails friendly_id
【发布时间】:2019-04-19 00:35:02
【问题描述】:

似乎无法让friendly_id 与我的类别和子类别一起使用。我也在使用friendly_id gem。

这是我的类别控制器

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

例如我现在的网址是 localhost:3000/categories/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

【问题讨论】:

标签: ruby-on-rails ruby friendly-id


【解决方案1】:

您尝试使用的路线的描述是:

# /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

所以你需要一个控制器。您不需要在 URL 中发送ids 或任何数字,您只需要正确处理它们:

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

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2012-10-14
    相关资源
    最近更新 更多