문제

will_paginate 보석은 내 버전의 Oracle에서 깨졌습니다. 기본값 paginate_by_sql WillPaginate 모듈의 메소드는 쿼리에 '추가'를 삽입하여 실패합니다.

코드 자체는 쉽게 고정되어 있지만 레일이 내 변경을 선택하는 가장 좋은 방법은 확실하지 않습니다.

보석 자체의 코드를 변경하고 싶지 않습니다. 다른 시스템에서 내 코드를 고장날 것입니다.

lib/test.rb 파일을 포함하는 시도를 시도했습니다.

module WillPaginate
  def paginate_by_sql
    (my code goes here)
  end
end

그리고 환경에서 필요로하지만 RB이지만 변경 사항을 선택하지는 않습니다. 또한 컨트롤러/application.rb에서 요구하려고 시도했지만 다시는 변경 사항을 선택하지 않았습니다.

일시적으로, 나는 특정 모델 자체 내에서 메소드를 무시함으로써 작동하게했지만, 이것은 약간의 해킹이며,이 프로젝트의 다른 모델에서는 사용할 수 없다는 것을 의미합니다.

이 작업을 수행하는 쉬운 방법이 있다고 확신하지만 Google을 사용하여 추적하는 운이 없습니다.

도움이 되었습니까?

해결책

당신이하고있는 일은 효과가 있지만 코드는 다음과 같아야합니다.

module WillPaginate
  module Finder
    module ClassMethods
      def paginate_by_sql(sql, options)
        # your code here
      end
    end
  end
end

다시 말해, Finder.rb로 이동하여 모듈 헤더와 재정의하려는 메소드를 제외한 모든 것을 삭제 한 다음 Lib의 파일에 저장하고 환경에 포함시킵니다. Voila, 인스턴트 원숭이 패치!

다른 팁

보다 간결한 솔루션 :

WillPaginate::Finder::ClassMethods.module_eval do
 def paginate_by_sql sql, options
   # Your code here
 end
end

Config/Initializers에서 코드를 이니셜 라이저 파일에 넣으십시오. 이곳은 환경이로드 될 때 실행 해야하는 코드를 넣을 수있는 올바른 장소입니다. 또한 코드를 구성하여 각 파일의 의도를 명확하게 만들므로 버그를 쉽게 추적 할 수 있습니다. 환경을 혼란시키지 마십시오 .RB!

좋아, 나는 다른 답변을 읽은 후에도 나 자신과 같은 사람들이 더 쉽게 어려움을 겪게 할 것입니다.

첫 번째 코드 라인을 검색하여 Github Repo에서 변경하려는 코드를 찾으십시오 (사용 사용을 쉽게 찾을 수 있습니다. 캐내다) 보석을 바꾸고 선택하고 싶습니다. Code 대신 왼쪽에 Issues

enter image description here

enter image description here

다음 변경하려는 모듈의 내용을 복사하여 적절하게 명명 된 상태로 배치하십시오. .rb 구성/초기화 폴더 내부의 파일. 예는 다음과 같습니다.

module Forem
  module TopicsHelper
    def link_to_latest_post(post)
      text = "#{time_ago_in_words(post.created_at)} #{t("ago_by")} #{post.user}"
      link_to text, forum_topic_path(post.topic.forum, post.topic, :anchor => "post-#{post.id}")
    end
  end
end

이제 다음으로 변경하십시오.

Forem::TopicsHelper.module_eval do
  def link_to_latest_post(post)
    text = "#{time_ago_in_words(post.created_at)} #{t("ago_by")} #{post.user}"
    link_to text, forum_topic_path(post.topic.forum, post.topic, :anchor => "post-#{post.id}")
  end
end

이제 코드를 추가로 변경하고 서버를 다시 시작하십시오.

멀리 간다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top