복붙노트

[RUBY-ON-RAILS] 컨트롤러에서 다른 컨트롤러 액션을 호출 난간

RUBY-ON-RAILS

컨트롤러에서 다른 컨트롤러 액션을 호출 난간

나는 컨트롤러 B.에서, 컨트롤러 A의 생성 조치를 호출 할 필요가

그 이유는 내가 컨트롤러 B. 인데요 때 다르게 리디렉션 필요가있다

그것은 레일에서 수행 할 수 있습니까?

해결법

  1. ==============================

    1.당신은 그 행동을 리디렉션을 사용할 수 있습니다 :

    당신은 그 행동을 리디렉션을 사용할 수 있습니다 :

    redirect_to your_controller_action_url
    

    더에 : 레일 가이드

    단지 새로운 액션을 렌더링하려면 :

    redirect_to your_controller_action_url and return
    
  2. ==============================

    2.서로 하나의 컨트롤러를 사용하려면 다음을 수행하십시오

    서로 하나의 컨트롤러를 사용하려면 다음을 수행하십시오

    def action_that_calls_one_from_another_controller
      controller_you_want = ControllerYouWant.new
      controller_you_want.request = request
      controller_you_want.response = response
      controller_you_want.action_you_want
    end
    
  3. ==============================

    3.당신이 제시 논리는 MVC, 다음하지 레일, 호환되지 않습니다.

    당신이 제시 논리는 MVC, 다음하지 레일, 호환되지 않습니다.

    이러한 고려에서, 나는 컨트롤러의 메소드를 만들 수 조언 액션에서 호출.

    예:

     def index
       get_variable
     end
    
     private
    
     def get_variable
       @var = Var.all
     end
    

    즉, 다른 컨트롤러를 통해 동일 할 당신이 컨트롤러 B.에있는 동안 컨트롤러 A에서 방법을 소환 할 수 말했다

    어휘 내가 많이 주장하는 이유가 매우 중요합니다.

  4. ==============================

    4.당신은 컨트롤러와 액션에 대한 URL을 얻을 url_for를 사용하고 해당 URL로 이동 redirect_to를 사용할 수 있습니다.

    당신은 컨트롤러와 액션에 대한 URL을 얻을 url_for를 사용하고 해당 URL로 이동 redirect_to를 사용할 수 있습니다.

    redirect_to url_for(:controller => :controller_name, :action => :action_name)
    
  5. ==============================

    5.이것은 또 다른 컨트롤러 액션을 호출하는 나쁜 관행입니다.

    이것은 또 다른 컨트롤러 액션을 호출하는 나쁜 관행입니다.

    당신은해야

    내 의견 :

    그래서 당신은 당신이 원하는 경로가 될 수있는이 액션 redirect_to의 PARAM로 보낼 수 있습니다.

  6. ==============================

    6.아마도 로직은 도우미로 추출 할 수 있을까? 헬퍼는 모든 클래스가 사용할 수있는 제어를 전송하지 않습니다. 당신은 호출 방식을 볼 수 있습니다, 아마도 컨트롤러 이름을, 그 안에 확인할 수 있습니다.

    아마도 로직은 도우미로 추출 할 수 있을까? 헬퍼는 모든 클래스가 사용할 수있는 제어를 전송하지 않습니다. 당신은 호출 방식을 볼 수 있습니다, 아마도 컨트롤러 이름을, 그 안에 확인할 수 있습니다.

  7. ==============================

    7.구조로 구성!

    구조로 구성!

    오히려 하나가 코드의 공유 및 사용자 정의 부분을 분리해서하는 컨트롤러를 설계해야 컨트롤러에 걸쳐 작업을 호출하는 것보다, 이유를 감안할 때. 이 둘을 방지하는 데 도움이 될 것입니다 - 코드 중복 및 파괴 MVC 패턴을.

    이이 문제 (구성)를 사용하여, 여러 가지 방법으로 수행 할 수 있지만 좋은 연습입니다.

    # controllers/a_controller.rb
    class AController < ApplicationController
      include Createable
    
      private def redirect_url
        'one/url'
      end
    end
    
    # controllers/b_controller.rb
    class BController < ApplicationController
      include Createable
    
      private def redirect_url
        'another/url'
      end
    end
    
    # controllers/concerns/createable.rb
    module Createable
      def create
        do_usefull_things
        redirect_to redirect_url
      end
    end
    

    희망이 도움이.

  8. ==============================

    8.다음과 같이 당신은 행동 안에 다른 조치를 호출 할 수 있습니다 :

    다음과 같이 당신은 행동 안에 다른 조치를 호출 할 수 있습니다 :

    redirect_to 액션 'ACTION_NAME'

    class MyController < ApplicationController
      def action1
       redirect_to action: 'action2'
      end
    
      def action2
      end
    end
    
  9. ==============================

    9.컨트롤러에서 이러한 기능을 분리하고 모델 파일에 넣어. 그런 다음 컨트롤러에서 모델 파일을 포함한다.

    컨트롤러에서 이러한 기능을 분리하고 모델 파일에 넣어. 그런 다음 컨트롤러에서 모델 파일을 포함한다.

  10. from https://stackoverflow.com/questions/5767222/rails-call-another-controller-action-from-a-controller by cc-by-sa and MIT license