2012-03-10 9 views
7

Estoy tratando de cambiar dinámicamente (si se hizo clic) un encabezado de tabla normal (que es un enlace) a otra clase de CSS definida 'th.hilite'. Este enlace simplemente ordena esta columna y el encabezado debe resaltarse cada vez que un usuario ordena la lista.Configuración condicional de estilo CSS desde el controlador de ruby ​​

La vista en la clase en cuestión debe ser cambiado, es así:

%table#mytable 
    %thead 
    %tr 
     %th= link_to 'Title', mytable_path(:sort => 'title'), :id => 'title_header' 

Mi pregunta es simplemente: ¿Cómo y dónde podría ajustar dinámicamente la clase a th.hilite% si la cabecera es hizo clic?

+0

Tienes que hacer esto en Javascript, no en rubí. –

+20

No deberías estar publicando preguntas directamente de la tarea de tarea 2 de saas-class.org aquí. Deberías preguntarte cómo hacer algo ... pero no la respuesta exacta a tu pregunta. – Ilan

+7

Lo más importante es que NO deberías haber publicado el código anterior que muestra directamente cómo responder a una parte de la pregunta. Es solo un mal comportamiento. – Ilan

Respuesta

14

Tenga cuidado de no poner la lógica (incluso condicionales) en sus puntos de vista, si se puede encontrar una manera de evitarlo. Para evitar este error común, que necesita para hacer un buen uso de los parametros y hashes de sesión y establecer las variables apropiadas en los controladores

# In your view 
%th{:class => @title_header}= link_to 'Title', my_path(:sort => 'title'), :id => 'title_header' 

# In your controller 
sort = params[:sort] || session[:sort] 
if sort == 'title' 
    ordering = {:order => :title} 
end 
+0

Si se está preguntando por qué || session [: sort], es porque puede hacer clic en algo que no sea una columna clasificable, en en cuyo caso no desea deshacer la ordenación porque su hash de parámetros ha expirado. También necesitarás un poco de lógica en el controlador como "if params [: sort]!= session [: sort] then session [: sort] = sort "tipo de cosa – mehtunguh

+0

Estoy tratando de entender esta respuesta. ¿Dónde en los documentos puedo leer sobre" qué? "para comprender cómo el title_header puede tener diferentes valores para cada th? – Alisso

26

Puede enlazar desde el punto de vista directa:

%th{:class => ("hilite" if @sort == "title")}= link_to 'Movie Title'...

Sin embargo, también tendrá que declarar la variable @sort ejemplo, en su controlador, y configurarlo en título o versión, según la columna que está ordenando. (Es decir @sort = params[:sort])

+3

en realidad no tiene que declarar una variable de instancia, simplemente puede usar params [: sort] – Sudhi

3

Por cierto, siempre y cuando los valores de su param name columna partido - no hay necesidad de codificar cada uno

def index 
    @by=params[:by] 
    @movies = Movie.order(params[:by]).all 
    end 
3

Javascript o no se requiere jQuery ..

La siguiente HAML funcionará

%th{:class=>('title' == @sortby)?'hilite':""}= link_to 'Movie Title', movies_path(:sort => 'title'), :id => 'title_header' 
Cuestiones relacionadas