【问题标题】:How to pass control from one controller to other in Rails?如何在 Rails 中将控制权从一个控制器传递给另一个控制器?
【发布时间】:2019-02-03 15:26:25
【问题描述】:

我有一个名为 Page_controller 的控制器和另一个名为 Categories_controller 的控制器。现在,每当 Page_controller 中的 home 方法被调用时,我都想被重定向到 a´categories 控制器,因为我想从那一刻起控制 Category 视图。这是我写的:

class PagesController < ApplicationController
  def home
  @categories = Category.all
  redirect_to category_url(@category)
end
end

但是当我打开服务器时出现错误提示:

undefined method `category_url' for #<PagesController:0x000000000b24ce20>

换行:

redirect_to category_url(@category)

有谁知道我如何将控制权从一个控制器传递到另一个控制器?我真的很绝望,所以感谢您提供的任何帮助

编辑:这是我的 routes.rb 文件:

Rails.application.routes.draw do
  resources :comments
  #resources :categories
  root to: 'pages#home'
  get 'index', to: 'controller_category#index'

  devise_for :users
end

以及从控制台打印出来的路线:

C:\Users\andri\Desktop\proj>bundle exec rake routes
                   Prefix Verb   URI Pattern                                                                              Controller#Action
                 comments GET    /comments(.:format)                                                                      comments#index
                          POST   /comments(.:format)                                                                      comments#create
              new_comment GET    /comments/new(.:format)                                                                  comments#new
             edit_comment GET    /comments/:id/edit(.:format)                                                             comments#edit
                  comment GET    /comments/:id(.:format)                                                                  comments#show
                          PATCH  /comments/:id(.:format)                                                                  comments#update
                          PUT    /comments/:id(.:format)                                                                  comments#update
                          DELETE /comments/:id(.:format)                                                                  comments#destroy
                     root GET    /                                                                                        pages#home
                    index GET    /index(.:format)                                                                         controller_category#index
         new_user_session GET    /users/sign_in(.:format)                                                                 devise/sessions#new
             user_session POST   /users/sign_in(.:format)                                                                 devise/sessions#create
     destroy_user_session DELETE /users/sign_out(.:format)                                                                devise/sessions#destroy
        new_user_password GET    /users/password/new(.:format)                                                            devise/passwords#new
       edit_user_password GET    /users/password/edit(.:format)                                                           devise/passwords#edit
            user_password PATCH  /users/password(.:format)                                                                devise/passwords#update
                          PUT    /users/password(.:format)                                                                devise/passwords#update
                          POST   /users/password(.:format)                                                                devise/passwords#create
 cancel_user_registration GET    /users/cancel(.:format)                                                                  devise/registrations#cancel
    new_user_registration GET    /users/sign_up(.:format)                                                                 devise/registrations#new
   edit_user_registration GET    /users/edit(.:format)                                                                    devise/registrations#edit
        user_registration PATCH  /users(.:format)                                                                         devise/registrations#update
                          PUT    /users(.:format)                                                                         devise/registrations#update
                          DELETE /users(.:format)                                                                         devise/registrations#destroy
                          POST   /users(.:format)                                                                         devise/registrations#create
       rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

【问题讨论】:

  • 您的routes.rb 是什么样的?它是否定义了您要使用的路线?
  • @lurker 我编辑了我的问题,所以你可以看到它!
  • 执行 bundle exec rake 路由并将其输出粘贴到您的问题中。另一方面,您可以使用as 选项参数为任何路由添加别名。

标签: ruby-on-rails ruby model-view-controller controller


【解决方案1】:

在你的 routes.rb 文件中取消注释这一行:

#resources :categories

这将为类别定义一组路由,将为您提供category_url(category)等方法。

您还需要一个 CategoriesController,否则您的下一个问题将是重定向会产生错误(没有这样的控制器)。你需要实现CategoriesController#show

https://guides.rubyonrails.org/getting_started.htmlhttps://guides.rubyonrails.org/routing.html

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多