[RUBY-ON-RAILS] 레일의 보석에서 모듈 방식을 재정의
RUBY-ON-RAILS레일의 보석에서 모듈 방식을 재정의
will_paginate 보석은 오라클의 내 버전 나뉩니다. WillPaginate 모듈의 기본 paginate_by_sql 방법은 질의에 추가 'AS'를 삽입하고 실패를 야기한다.
코드 자체는 쉽게 고정,하지만 난 내 변화를 데리러 레일을 얻을 수있는 가장 좋은 방법의 확실하지 않다.
나는 내 코드가 다른 컴퓨터에 깨진 떠날 것 같은, 보석 자체의 코드를 변경하지 않습니다.
나는이 포함 된 lib 디렉토리 / test.rb 파일을 생성하려고 :
module WillPaginate
def paginate_by_sql
(my code goes here)
end
end
그리고으로 environment.rb에서 그것을 필요로하지만, 내 변화를 정확히 인식하지 못한 것입니다. 또한 컨트롤러 / application.rb에서 그것을 필요로했지만, 다시 내 변경 사항을 따기 없습니다.
일시적으로, 나는 특정 모델 자체 내에서 메서드를 재정 의하여 작업에있어, 그러나 이것은 해킹의 비트, 그리고 수단 나는이 프로젝트에 다른 모델 중 하나에서 사용할 수 없습니다.
나는 확실히 거기에이 작업을 수행 할 수있는 쉬운 방법이지만, 내가 구글을 사용하여 아래를 추적 운을 가지고 있지 않다입니다.
해결법
-
==============================
1.이런 식으로 당신이 의지 작업을하고 있지만, 코드의 요구 사항을 볼 수 있습니다 :
이런 식으로 당신이 의지 작업을하고 있지만, 코드의 요구 사항을 볼 수 있습니다 :
module WillPaginate module Finder module ClassMethods def paginate_by_sql(sql, options) # your code here end end end end
즉, finder.rb로 이동, 모듈 헤더와 재 지정할 방법을 제외하고 삭제 모든 후 lib 디렉토리의 파일에 저장하고 environment.rb에에 포함. 짜잔, 인스턴트 원숭이 패치!
-
==============================
2.더 간결 솔루션 :
더 간결 솔루션 :
WillPaginate::Finder::ClassMethods.module_eval do def paginate_by_sql sql, options # Your code here end end
설정 / 초기화의 초기화 파일에 코드를 넣습니다. 이 환경이로드 될 때 요구가 실행되도록하는 것이 코드를 삽입 할 수있는 올바른 장소입니다. 그것은 또한 더 나은 만드는 코드를 구성 각 파일의 의도를 명확하게, 따라서 버그를 추적하기 쉬울 것이다. environment.rb에 아무런 영향도 미치지하지 마십시오!
-
==============================
3.좋아, 난 그냥 따라 와서 아직 다른 답변을 읽은 후 조금 투쟁 자신과 같은 사람들이 쉽게 만들거야.
좋아, 난 그냥 따라 와서 아직 다른 답변을 읽은 후 조금 투쟁 자신과 같은 사람들이 쉽게 만들거야.
먼저 (당신이 쉽게 사용 놀리려는를 찾을 수) 당신이 보석으로 변경하려면, 다음 문제 대신 왼쪽 코드를 선택하는 코드 줄을 검색하여 당신은 GitHub의의의 repo에 변경하고자하는 코드를 찾을 수
다음으로 복사합니다 변경하고 설정 / 초기화 폴더의 적절하게 이름을 .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
이제, 코드를 추가 변경하고 서버를 다시 시작합니다.
멀리 당신은 간다!
from https://stackoverflow.com/questions/580314/overriding-a-module-method-from-a-gem-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 언제 레일에 서버를 다시 시작해야합니까? (0) | 2020.02.23 |
---|---|
[RUBY-ON-RAILS] 왜 RSpec에 + 셀레늄에 대한 공유 액티브 연결을 사용할 수 있습니까? (0) | 2020.02.23 |
[RUBY-ON-RAILS] 서버 빈 / 레일 레일 : 6 : 경고 : 이미 초기화 일정 APP_PATH 오류 (0) | 2020.02.23 |
[RUBY-ON-RAILS] 보석 'uglifier'을로드하는 동안 오류가 발생했습니다. (Bundler를 :: GemRequireError) (0) | 2020.02.23 |
[RUBY-ON-RAILS] 레일 및 백본 협력 (0) | 2020.02.23 |