2012-03-13 10 views
4

クリックした後にヘッダーの色が異なるようにメニューの書式を設定しています。私は各ビューに同じhamlテンプレートを使用したいと思いますし、コントローラが特定のhtml要素のクラスを変更したいと思います。コントローラから特定のhtml要素をターゲットにしてクラスを追加するにはどうすればよいですか?Rails:コントローラから要素のクラスを変更する

ここではサンプルです:

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パラメータに基づいてfoobarです:

%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

関連する問題