복붙노트

[RUBY-ON-RAILS] 루비 온 레일즈에서 컨트롤러간에 코드를 재사용 모범 사례

RUBY-ON-RAILS

루비 온 레일즈에서 컨트롤러간에 코드를 재사용 모범 사례

내가 공유하고 싶은 몇 가지 제어 방법이있다. 레일에 루비에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 내 컨트롤러 확장하는 것을 추상 클래스를 만들 경우, 또는 내가 모듈을 만들고 각각의 컨트롤러에 추가해야합니까? 아래는 내가 공유하려는 컨트롤러 방법은 다음과 같습니다

def driving_directions
  @address_to = params[:address_to]
  @address_from = params[:address_from]
  @map_center = params[:map_center_start]

  # if we were not given a center point to start our map on
  # let's create one.
  if !@map_center && @address_to
    @map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_to).ll
  elsif !@map_center && @address_from
    @map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_from).ll
  end
end

def printer_friendly
  starting_point = params[:starting_point].split(',').collect{|e|e.to_f}
  ne = params[:ne].split(',').collect{|e|e.to_f}
  sw = params[:sw].split(',').collect{|e|e.to_f}
  size = params[:size].split(',').collect{|e|e.to_f}
  address = params[:address]

  @markers = retrieve_points(ne,sw,size,false)
  @map = initialize_map([[sw[0],sw[1]],[ne[0],ne[1]]],[starting_point[0],starting_point[1]],false,@markers,true)
  @address_string = address
end

해결법

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

    1.제 생각에는, 일반적인 객체 지향 설계 원칙이 적용됩니다

    제 생각에는, 일반적인 객체 지향 설계 원칙이 적용됩니다

    선택이 그것을 필요로하는 컨트롤러 사이의 논리적 관계에 따라 귀하의 경우, 방법은 상태 (PARAMS)가 필요합니다. 게다가:

    또한:

  2. ==============================

    2.나는이 질문에 육년 전에 질문을 받았다 알고있다. 그냥 레일 4, 이제 더 아웃 박스 솔루션의 that're 컨트롤러 우려가있어 것을 지적하고 싶다.

    나는이 질문에 육년 전에 질문을 받았다 알고있다. 그냥 레일 4, 이제 더 아웃 박스 솔루션의 that're 컨트롤러 우려가있어 것을 지적하고 싶다.

  3. ==============================

    3.실제로 모듈이 컨트롤러 사이에 공유 코드에 가장 좋은 방법이라고 생각합니다. 당신이보기 사이에 코드를 공유하려는 경우 도우미가 좋다. 도우미는 기본적으로 당신은 내가 당신의 lib 디렉토리 폴더에 모듈을 배치 제안,보기 수준에 접속하지 않아도 그렇다면, 모듈을 영화 롭게하고 있습니다.

    실제로 모듈이 컨트롤러 사이에 공유 코드에 가장 좋은 방법이라고 생각합니다. 당신이보기 사이에 코드를 공유하려는 경우 도우미가 좋다. 도우미는 기본적으로 당신은 내가 당신의 lib 디렉토리 폴더에 모듈을 배치 제안,보기 수준에 접속하지 않아도 그렇다면, 모듈을 영화 롭게하고 있습니다.

    모듈을 만든 후에는 원하는 컨트롤러에 포함하기 위해 include 문을 사용해야합니다.

    http://www.rubyist.net/~slagell/ruby/modules.html

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

    4.나는 모듈 접근 방식에 동의합니다. 당신의 lib 디렉토리에 별도의 루비 파일을 생성하고 새 파일에 모듈을 넣습니다.

    나는 모듈 접근 방식에 동의합니다. 당신의 lib 디렉토리에 별도의 루비 파일을 생성하고 새 파일에 모듈을 넣습니다.

    가장 확실한 방법은와 ApplicationController에 메소드를 추가하는 것입니다,하지만 난 당신이 이미 알고 확신합니다.

  5. ==============================

    5.당신이 컨트롤러와 도우미 사이의 공유 코드에 원하는 경우에, 당신은 라이브러리의 모듈을 만드는 시도해야합니다. 당신은 @template 및 컨트롤러와 도우미에 액세스 방법뿐만 아니라위한 @Controller 사용할 수 있습니다. http://www.shanison.com/?p=305 자세한 내용은이 옵션을 선택합니다

    당신이 컨트롤러와 도우미 사이의 공유 코드에 원하는 경우에, 당신은 라이브러리의 모듈을 만드는 시도해야합니다. 당신은 @template 및 컨트롤러와 도우미에 액세스 방법뿐만 아니라위한 @Controller 사용할 수 있습니다. http://www.shanison.com/?p=305 자세한 내용은이 옵션을 선택합니다

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

    6.또 다른 가능성 :

    또 다른 가능성 :

    당신의 공통 코드 상태를 필요로하고 컨트롤러 사이에 동작을 공유하려는 경우, 당신은 당신의 모델 또는 lib 디렉토리 중 하나에 평범한 구식 루비 클래스에 넣을 수 있습니다. 그 모델 클래스는 모든 액티브 클래스가 지속에도 불구하고 지속 할 필요가 없습니다 기억하십시오. 즉, 과도 모델 클래스를 가질 허용합니다.

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

    7.나는 컨트롤러 (여기서 코드 삶) 다른 하나 컨트롤러 상속을하는 것입니다 걸쳐 동일한 코드를 공유하는 하나 효과적인 방법을 발견했다. 나는 네임 스페이스 컨트롤러의 또 다른 세트 내 컨트롤러에 정의 된 동일한 방법을 공유하기 위해이 방법을 사용했다.

    나는 컨트롤러 (여기서 코드 삶) 다른 하나 컨트롤러 상속을하는 것입니다 걸쳐 동일한 코드를 공유하는 하나 효과적인 방법을 발견했다. 나는 네임 스페이스 컨트롤러의 또 다른 세트 내 컨트롤러에 정의 된 동일한 방법을 공유하기 위해이 방법을 사용했다.

  8. from https://stackoverflow.com/questions/128450/best-practices-for-reusing-code-between-controllers-in-ruby-on-rails by cc-by-sa and MIT license