2012-03-13 4 views
4

클릭했을 때 헤더의 색상이 다르게 표시되도록 메뉴의 서식을 지정하고 있습니다. 각보기에 대해 동일한 haml 템플릿을 사용하고 컨트롤러가 특정 html 요소의 클래스를 변경하기를 원합니다. 컨트롤러에서 특정 html 요소를 어떻게 타겟팅하고 클래스를 추가합니까?레일 : 컨트롤러에서 요소의 클래스를 변경하십시오.

HAML :

여기에 샘플입니다

%tr 
    %th 
    %a#name-header= link_to "Name", people_path({:sort => 'by_name'}) 
    %th Date 
    %th Description 
    %th More Info 

감사관 :

def index 
    case params[:sort] 
    when "by_name" 
    @people = Person.find(:all, :order => "name") 
    #How can I change the class of the th element here 
    else 
    @people = Person.all 
    end 
end 

감사합니다!

답변

5

컨트롤러 코드

def index 
    @people, @klass = case params[:sort] 
    when "by_name" 
    [Person.order(name: :asc), "foo"] 
    else 
    [Person.all, "bar"] 
    end 
end 

보기 코드

tr의 CSS 클래스가 sort 매개 변수에 따라 foo 또는 bar됩니다 :

%tr{class: @klass} 
    %th= link_to "Name", people_path(sort: "by_name"), id: "name-header" 
    %th Date 
    %th Description 
    %th More Info 
1

컨트롤러에서 html 요소의 클래스를 직접 변경할 수 없습니다.

클래스가 params[:sort]을 기반으로 할 것 같습니다. 템플리트에서 해당 CSS 클래스가 있는지 확인할 수 있습니다. 이것을 도우미로 옮기는 것이 더 깔끔할 것입니다.

+0

그래서 내 HAML가 액세스 할 수 있습니다 params 해쉬에게? 또한, 부분은 무엇입니까? – Nathan

+1

예, params에 대한 액세스 권한이 있습니다. 나 또한 실수로 도우미 대신 부분적으로 썼다. 부분은보기를 정리하는 데 사용할 수있는 부분 템플릿입니다. 헬퍼는 app/helpers 디렉토리에 있으며 뷰를 정리하는 데 도움이되는 메소드를 그 안에 넣을 수 있습니다. – James

관련 문제