2017-01-18 7 views
0

최근 엔진을 사용하여 일부 앱을 깨기 시작했습니다. 사용중인 공유 부분의 일부 링크에서 라우팅 문제가 발생했습니다. 부분은 다음과 같습니다.메인 앱 및 엔진에 대한 부분 삭제 링크 공유

shared/delete_link.html.erb 

<%= link_to object, 
      method: :delete, 
      data: { confirm: 'Are you sure?' } do%> 
      <span class="glyphicon glyphicon-remove"></span> 
<% end %> 

이렇게 부분을 호출합니다.

<%= render "shared/delete_link", :object => search %> 

이 모델/주요 응용 프로그램에 여전히 루트에 대한 잘 작동하지만 지금은이 같은 상황이 :

|-controller(main-app) 
|--show(main-app) 
|---partial(engine) 
|----partial-delete-link(main-app) 
|-----link-route(engine) 

부분이 렌더링 그것을 내가 삭제 할 개체를 전달 엔진의 경로에 대한 삭제 링크가 포함 된 메인 앱의 컨트롤러가 중요한 것은 (내가 생각하기에) 컨트롤러가 주 앱에 있고 개체의 경로가 마운트 된 엔진에 있으므로 네임 스페이스가되어야한다는 것입니다.

내 뷰에 많은 로직을 넣지 않고 기능을 복원하려면 어떻게해야합니까?

답변

0

리팩토링 할 때 과용하지 마십시오.

하나의 요소를 만드는 데 partial을 사용하는 것은 거의 적합하지 않습니다. 대신 당신은 쉽게 기본 인수에 작성하는 동안 다른 방법으로 프록시를 래퍼를 만들 수있는 방법을 사용

module LinksHelper 
    def link_to_destoy(object, **kwargs) 
    opts = { 
     method: :delete, 
     data: { confirm: 'Are you sure?' } 
    }.deep_merge(kwargs) 
    link_to object, opts do 
     content_tag :span, class: 'glyphicon glyphicon-remove' 
    end 
    end 
end 

대신 당신은 단지 도우미 메서드를 만들 수 있습니다. 비교에서 partial은 HTML의 큰 덩어리에는 좋지만 변수 전달 및 구성에 있어서는 여전히 지저분합니다.

는 배열을 전달 레일에서 네임 스페이스 경로에 대한 링크를 만들려면 도움을

# /foos/bars/:id 
<%= link_to_destoy([:foo, bar]) %> 

# /foos/:foo_id/bars/:id 
<%= link_to_destoy([foo, bar]) %> 
+0

감사합니다. 결국 헬퍼를 만들 줄 알았지 만 배열을 link_to에 전달할 수있는 아이디어가 없었습니다. 그것은 바로 경로를 구축하는 것 같지만 여전히 # 12 # : # 클래스에 대한 정의되지 않은 메서드 'foo_bar_path'오류가 발생 : 000 ... 28> : 0x0 ... bb88>'왜 그것이 경로를 인식하지 못합니다 내가 길을 긁어 모을 때 나타 납니까? 어떻게이 도우미를 도우미 테스트 할 수 있습니까? – mkrinblk