2014-07-06 3 views
1

헬퍼를 사용하려고 시도한 것은 이번이 처음입니다. 내 관점에서 재사용을 계속하는 비교적 긴 방법을 도우미에 넣고 싶습니다.레일에서 strftime을 줄이기 위해 헬퍼 사용

뷰에서 코드의 인스턴스는 여기에 있습니다 :

def start_time_display 
     self.strftime("%B #{@guide.date_starting.day.ordinalize}") 
    end 

    def end_time_display 
     self.strftime("%B #{@guide.date_ending.day.ordinalize}") 
    end 

다음이에 쓰기 :

<%= @guide.date_starting.strftime("%B #{@guide.date_starting.day.ordinalize}") %> to 
<%= @guide.date_ending.strftime("%B #{@guide.date_ending.day.ordinalize}") %> 

그래서 내가하려고 무엇을 모듈 도우미이 쓰기입니다 날이 오류를 제공하는 뷰

<%= @guide.date_starting.start_time_display %> to <%= @guide.date_ending.end_time_display %> 

:

,536,
undefined method `start_time_display' for Wed, 03 Sep 2014 00:00:00 UTC +00:00:Time 

그럼 어떻게해야합니까? 내가 어디로 잘못 가고 있니? 이걸 더 잘 쓸 수 있을까요? 여기서 도우미에게 올바른 방법으로 접근하고 있습니까? 나는 문서를 참조했고, 나의 이해는 이것이 그들이 거기있는 이유이다.

그래서 난 데미안의 답변을 추가,

View.html.erb

안내 도우미

def time_display(datetime) 
    strftime("%B #{datetime.day.ordinalize}") 
end 


def time_display_span(start, end_date) 
    time_display(start) + " to " + time_display(end_date) 
end 

오류 ...

undefined method `strftime' for #<#<Class:0x000001088c0128>:0x000001088cb168> 
: 편집

업데이트 : Damien은 생명의 은인이었습니다. 그의 대답은 대접을 받았고 나를 이해하는 데 도움이되었습니다. 명성

미리 감사드립니다.

+0

, 내가 그렇게 많이 .. –

답변

3

약간의 기본 개념을 놓쳤습니다.

@guide.date_starting.start_time_display 

은 위 DateTime 인스턴스에있어서 date_startingstart_time_display 호출. date_starting과 같은 방법은 @guide의 메소드입니다.

보기 도우미는 전역 함수처럼, 그래서 당신은 인수로 @guide.date_starting 전달합니다 :

def time_display(datetime) 
    datetime.strftime("%B #{datetime.day.ordinalize}") 
end 

def time_display_span(start_date, end_date) 
    time_display(start_date) + " to " + time_display(end_date) 
end 

참고 : 인수로 date_starting/date_ending에 전달할 수 있기 때문에이 일반적인 time_display을 사용했다. 나는 또한 더 귀하의 의견을 단순화하는 time_display_span를 추가했습니다 :

<%= time_display_span(@guide.date_starting, @guide.date_ending) %> 
+0

훨씬 더 나은 대답을 참조하십시오. 내 삭제. –

+0

@ Justin 걱정과 고마워요 :) –

+0

@DamienRoche 괜찮아요 내가 당신을 얻을 것 같아요하지만 당신의 방법이 날이 오류 예기치 않은 keyword_end def time_display_span (시작, 끝) ^/사용자/프레드/projects/artsmill/artsmill/app/helper/guides_helper.rb : 8 : 구문 오류, 예기치 않은 keyword_end, 예상 ')'time_display (시작) + "~"time_display (끝)^ –