0

我目前正在使用一个尚未更新为与 Rails 5.2 一起使用的 gem 的自定义构建。我已经提取了核心文件,现在我遇到了一个问题,我需要在内部访问引擎的路由。gem 的所有文件夹都有命名空间payola - 它允许我访问它的资源。如何设置我的路由以考虑 gem 的命名空间路由,而不包括对引擎本身的引用(这会导致重复)。我的路线文件如下。当我单独将路由添加到 Rails.application.routes.draw 时,它无法找到它的控制器。

路线.rb

Rails.application.routes.draw do
  get 'mobile_search/index'
  mount Payola::Engine => '/payola', as: :payola
  mount ActionCable.server => '/cable'
  require 'sidekiq/web'
  mount Sidekiq::Web => '/sidekiq'
  mount Resque::Server, :at => "/resque"
  mount CountryStateSelect::Rails::Engine, at: "/"

  devise_for :admins
  devise_for :users, path: '', path_names: {sign_in: 'login', sign_out: 'logout', sign_up: 'signup'}, controllers: {registrations: 'users/registrations'}

  devise_scope :user do
    put 'user_change_plan', :to => 'users/registrations#user_change_plan'
    authenticated do
      root to: 'user_dashboard#index', as: 'authenticated_user_root'
    end
    unauthenticated do
      root to: 'home#index', as: 'unauthenticated_user_root'
    end
  end

  devise_scope :admin do
    authenticated do
      root to: 'admin_dashboard#admin', as: 'authenticated_admin_root'
    end

    unauthenticated do
      root to: 'home#index', as: 'unauthenticated_admin_root'
    end
  end

  resources :after_registration_wizard, only: [:show]

  root 'home#index'
end

# Payola

Payola::Engine.routes.draw do
  match '/buy/:product_class/:permalink'  => 'transactions#create',   via: :post, as: :buy
  match '/confirm/:guid'                  => 'transactions#show',     via: :get,  as: :confirm
  match '/status/:guid'                   => 'transactions#status',   via: :get,  as: :status

  match '/subscribe/:plan_class/:plan_id' => 'subscriptions#create',   via: :post,   as: :subscribe
  match '/confirm_subscription/:guid'     => 'subscriptions#show',     via: :get,    as: :confirm_subscription
  match '/subscription_status/:guid'      => 'subscriptions#status',   via: :get,    as: :subscription_status
  match '/cancel_subscription/:guid'      => 'subscriptions#destroy',  via: :delete, as: :cancel_subscription
  match '/change_plan/:guid'              => 'subscriptions#change_plan', via: :post, as: :change_subscription_plan
  match '/change_quantity/:guid'          => 'subscriptions#change_quantity', via: :post, as: :change_subscription_quantity
  match '/update_card/:guid'              => 'subscriptions#update_card', via: :post, as: :update_card

  match '/update_customer/:id'            => 'customers#update', via: :post, as: :update_customer

  match '/create_card/:customer_id'       => 'cards#create', via: :post, as: :create_card
  match '/destroy_card/:id/:customer_id'  => 'cards#destroy', via: :delete, as: :destroy_card

  mount StripeEvent::Engine => '/events'
end
4

1 回答 1

0

I created a scoped module that would render the same results as the engine itself.

routes.rb

 scope :module => "payola" do
    match '/buy/:product_class/:permalink'  => 'transactions#create',   via: :post, as: :buy
    match '/confirm/:guid'                  => 'transactions#show',     via: :get,  as: :confirm
    match '/status/:guid'                   => 'transactions#status',   via: :get,  as: :status

    match '/subscribe/:plan_class/:plan_id' => 'subscriptions#create',   via: :post,   as: :subscribe
    match '/confirm_subscription/:guid'     => 'subscriptions#show',     via: :get,    as: :confirm_subscription
    match '/subscription_status/:guid'      => 'subscriptions#status',   via: :get,    as: :subscription_status
    match '/cancel_subscription/:guid'      => 'subscriptions#destroy',  via: :delete, as: :cancel_subscription
    match '/change_plan/:guid'              => 'subscriptions#change_plan', via: :post, as: :change_subscription_plan
    match '/change_quantity/:guid'          => 'subscriptions#change_quantity', via: :post, as: :change_subscription_quantity
    match '/update_card/:guid'              => 'subscriptions#update_card', via: :post, as: :update_card

    match '/update_customer/:id'            => 'customers#update', via: :post, as: :update_customer

    match '/create_card/:customer_id'       => 'cards#create', via: :post, as: :create_card
    match '/destroy_card/:id/:customer_id'  => 'cards#destroy', via: :delete, as: :destroy_card
    mount StripeEvent::Engine => '/events'
  end
于 2018-11-27T23:09:58.617 回答