2013-08-05 2 views
2

나는 form_for을 뱉어 낼 draper decorator에서 메소드를 생성하려고합니다. 인덱스 뷰에서 레코드를 검색하는 데 사용하는 양식이 있고 수십 개의 리소스가 있으므로 가능하면이 논리를 한 곳에서 유지하려고합니다 (응용 프로그램 데코레이터). 제 문제는 제가 데코레이터에서 form_for를 렌더링하는 방법을 모른다는 것입니다. 나는 행운을 들이지 않고 이것을 시도하고 성취하기 위해 concat과 capture의 일부 사용법을 보았습니다. 내가 얻을 수 있었던 것은 내 div를 표시하는 것입니다 (HTML이 아닌 일반 텍스트처럼). 어떻게 할 수 있을지에 대한 아이디어가 있습니까? 이것은 코드를 내가 가지고있다 : Draper with form_for with method

def crud_index_search(search_obj) 

h.concat "<div id='basic_search' style='display:none;'>" 

search_form_for search_obj do |f| 
    h.concat '<div class="input-append">' 
    f.text_field :name_or_description_cont, :placeholder => 'Quick search ...', :id => 'search' 
    h.concat "<button class='btn'><i class='icon-search'></i></button>" 
    h.concat '</div>' 
    link_to 'Advanced Search', '#', :id => 'advanced_search_btn', :class => 'pull-right' 
end 

h.concat '</div>' 

h.concat "<div id='advanced_search' style='display:none;'>" 
search_form_for search_obj do |f| 
    f.condition_fields do |c| 
    h.concat render "crud/partials/condition_fields", :f => c 
    end 
    h.concat "<p>#{ link_to_add_fields 'Add Conditions', f, :condition }</p>" 
    f.submit 'Search' 
    h.concat "#{link_to 'Basic Search', '#', :id => 'basic_search_btn', :class => 'pull-right'}" 
end 
h.concat '</div>' 
end 

내보기에

...

<%= @categories.crud_index_search @search %> 

는 어떤 도움을 크게 감상 할 수있다!

FYI, 이미 이것을 부분적으로 넣었지만 작동합니다. 그러나 리소스에 따라 다르도록 추가해야 할 더 복잡한 논리가 있습니다. 따라서 부분적으로 이상적이지 않습니다. 나를 위해. 그게 거기에 무엇 때문에

감사

답변

1

드레이퍼 뷰에 관한 논리를 착용하는 우수하고 간단한 프리젠 테이션에서 잘하지, 그러나 당신은 원칙적으로보기로 콘텐츠 프리젠 테이션을 떠나해야합니다.

내가 권장하는 패턴은 Draper 개체의 메서드를 사용하여 논리를 용이하게하고 각 논리 경로에 적절한 부분을 렌더링하는 것입니다.

그래서 당신은 이런 일이있을 수 있습니다

def crud_search_index(search_object) 
    if search_object.something_to_check 
    h.render 'shared/one_version_of_my_form' 
    else 
    h.render 'shared/another_version_of_my_form' 
    end 
end 

을 그리고, 더 나은, 양식이 직접 그 search_object 관련되어 있기 때문에, 실제로 해당 검색 개체의 드레이퍼 실내 장식을 만들 것입니다 및에 방법을 넣어 "응용 프로그램"데코레이터 대신에 양식을 생성하십시오.

그런 다음 뷰는 같은 ​​것입니다 :

<%= @search.form %> 

그리고 당신이 @categories에 대한 참조를 필요로하는 경우 그 방법에 전달합니다.