2012-07-11 3 views
3

헬퍼가 뷰/컨트롤러에서 어떻게 작동하는지 잘 이해하지 못합니다. 나는 그들을 사용한 적이 없다.coffeescript js에서 Rails 헬퍼를 사용하는 방법

내 특정 질문 : 거의 모든 내보기 AJAX를 구현합니다. 내 컨트롤러의 대부분에서 update.js.coffeecreate.js.coffee 다음 코드의 형태를 가지고 : popup 일부 요소를 표시하는 자바 스크립트 함수입니다

jQuery -> 
    <% if @product.errors.any? %> 
    error_info = '<%= j(render :partial => "shared/errors", :locals => { :record => @product }) %>' 
    popup error_info 

    <% else %> 
. 
. 
. 

.

이것을 도우미로 추상화 할 수있는 방법이 있습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이 코드는 거의 모든 경우에서 동일합니다. 단, @product의 2 가지 용도는 당연히 해당 모델에 따라 다를 수 있습니다.

만약 이것이 어떤 도우미가 사용되지 않는다면, 1) 그들은 무엇을 위해 사용됩니까? 2) 대신 무엇을 사용해야합니까?

편집 : BONUS QUESTION : 실제로 많은 새 기능, ​​작성, 편집 및 업데이트 기능이 모델에서 유사합니다. 이걸 어떻게 말라니? 아니면 그것에 대해 걱정하지 않습니까?

답변

0

이 코드를 레일 도우미로 리팩토링하려면 다른 헬퍼 메소드와 마찬가지로 모든 자바 스크립트 코드를 문자열로 사용해야하며 레일 헬퍼가 문자열을 반환해야합니다.

레일 헬퍼는 뷰에서 리펙터 로직을 도울 수 있으므로 코드를 논리적으로 적게 유지할 수 있으며 반복되는 코드가 더 건조해질 수 있습니다.

모델 전체에서 일부 코드가 반복되는 경우 해당 코드를 lib 디렉토리의 루비 모듈로 리팩토링하여 해당 모델을 모델에 포함시킬 수도 있습니다.

+0

감사합니다. 도우미가 반환하는 문자열은 자바 스크립트이며 erb와 맞습니까? 그것은 커피이기 때문에 반환 된 문자열에 줄 바꿈과 이중 간격 들여 쓰기가 필요합니까? – Bryan

3

첫 번째 단계는 파일의 확장자를 .js.coffee.erb으로 변경하는 것입니다. 그러면 자산 파이프 라인에서 ERB로 파일을 해석하도록합니다.

두 번째 옵션 단계는 사용자 지정 도우미를 Sprokets에 추가하여 Coffee 스크립트 파일 *에서 자신의 메서드를 호출 할 수 있도록하는 것입니다. 단순히 새로운 도우미 모듈을 생성 한 다음 초기화에 등록 :

Sprockets::Context.send :include, CoffeeHelper 

* : 자산이 아니라 컴파일 할 때 자산 당신이 ERB가 실행되기 때문에 사용에 사용되는 모든 헬퍼에 액세스 할 수 없습니다 HTTP 요청의 일부로 제공됩니다. 정상 컨트롤러/도우미 설정이 없습니다.

관련 문제