Ruby on rails Rails:更改元素';来自控制器的类

Ruby on rails Rails:更改元素';来自控制器的类,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在格式化一个菜单,这样在你点击它之后,标题的颜色就不同了。我希望对每个视图使用相同的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 ind

我正在格式化一个菜单,这样在你点击它之后,标题的颜色就不同了。我希望对每个视图使用相同的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

谢谢

您不能直接从控制器更改html元素的类


看起来您的类将基于
params[:sort]
。您可以在模板中进行检查,以生成适当的css类。将其移动到助手中可能会更干净。

控制器代码

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

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

那么我的haml可以访问params散列?还有,什么是分部?是的,它可以访问参数。我还意外地编写了partial而不是helper。分部只是一个分部模板,可以用来清理视图。Helpers位于app/Helpers目录中,您可以在其中放置方法来帮助清理视图。