1
나는 PORO 방식을 사용하여 제 발표자를 만들기 시작했습니다. 예 발표자는 app/presenters/band_presenter.rb
에 있으며 여기의 코드입니다PORO 발표자가 URL 헬퍼를 깨기
class BandPresenter
def method_missing(m, *args, &block)
@band.send(m)
end
def initialize(band)
@band = band
end
def thumb_url(size = :large_s)
@band.images[size.to_s] if @band.images
end
end
그리고 그것은 잘 작동합니다. 그러나 레일 url 도우미 메서드에서 해당 발표자의 인스턴스를 사용하는 경우이를 나눕니다. 예 :
@band = Band.find(1)
= link_to @band.name, band
# => /bands/1
@band = @band.find(1)
@band = BandPresenter.new(@band)
= link_to @band.name, band
# => /%23%3CBandPresenter:0x007f9139c50db0%3E/1
완전히 합법적 인 것 같습니다. 내 질문은 - 어떻게 든 내 발표자가 URL 도우미를 사용하는 그런 식으로 지원할 수 있습니까?
을 respond_to_missing'가 충분하지 않다'정의, 영업 이익은 또한'method_missing'을 정의해야합니다 '@ band'에 누락 된 전화를 '위임'합니다. 또한,'to_param'뿐만 아니라'model_name' 메소드도 정의해야하기 때문에, 솔루션의 첫 번째 평가는 작동하지 않을 것입니다. –
OP에서 코드를 복사하여 붙여 넣을 이유가 없다는 것을 알았습니다. 당연히 이미 기존 메서드에 메서드를 추가해야한다는 의미였습니다 (이미 'method_missing'이 정의되어 있습니다). 'model_name'에 대한 의견을 보내 주셔서 감사합니다. 그래서 "충분"했는지 테스트하지 않았기 때문에 "시도"라고 말했습니다. – mrbrdo
네 말이 맞아, 나는 OP가 이미 'method_missing'으로 정의 된 것을 알지 못했다. BTW'model_name'은 인스턴스가 아닌'Band' 클래스에 위임되어야하며,'BandPresenter' 클래스는 다음 예제처럼 응답해야합니다 : https://gist.github.com/myobie/981251. –