Actions conditionnelles (pr Controller et ActiveRecord)

Bonjour,

J’ai souvent dans les actions de contrôleur de grandes parenthèses du
style:

class UsersController < ApplicationController
def active
unless active?

end
end

def delete
unless active?

end
end

def unactive
if active?

end
end

private

def active?
user = User.find(:id)
user.active # 0 or 1
end
end

Est-il possible de filtrer l’accès à ces actions en gérant le filtrage
en en-tête, via un ou plusieurs before_filter par exemple.

Merci à vous :slight_smile:

En gros tu veux restreindre l’exécution de tes actions en fonction du
retour
de ta fonction “active?” ?

Alors, oui, je dirais qu’un bon before_filter te gagnerais du temps, de
la
lisibilité et de t’épargnerais de la vilaine répétition.

Michel B. wrote:

En gros tu veux restreindre l’exécution de tes actions en fonction du
retour
de ta fonction “active?” ?

Oui, en effet ça serait bcp mieux je pense.

Alors, oui, je dirais qu’un bon before_filter te gagnerais du temps, de
la lisibilité et de t’épargnerais de la vilaine répétition.

Par contre je ne sais pas quelle syntaxe employer pour l’écrire.

Quelques subtilités en plus :

before_filter :only_if_active, :except => {méthode(s) pour
[la|les]quelle(s)
tu veux ne pas appliquer utiliser ce filtre}

def only_if_active
return false unless active?
end

et before_filter :only_if_active :slight_smile:

Hum, c’est pas très sexy j’trouve. En plus il y a redondance avec une
fonction supplémentaire qui renvoie “oui” ou “non” également.
En fait j’aurais souhaité quelque chose comme:

before_filter :active unless :active?
before_filter :delete unless :active?
before_filter :unactive if :active?

2008/6/20 David B. [email protected]:

Par contre je ne sais pas quelle syntaxe employer pour l’écrire.

Posted via http://www.ruby-forum.com/.

def only_if_active
return false unless active?
end

et before_filter :only_if_active :slight_smile:

ça devrait le faire. Ou pas.

Finalement ça me convient très bien, tout bien réfléchi :slight_smile:
Merci pour votre aide.

Il n’y a pas que :except, il y a aussi :only, qui fait l’inverse
(applique
le filtre seulement si la méthode est dans la liste passée à :only).

Ensuite, je ne vois pas ce qui te gêne dans le fait d’écrire une méthode
de
filtre, mais si tu veux faire du encore plus beau rien ne t’empêche
d’écrire
un plugin qui ajoute une méthode de classe automagique aux contrôleurs
pour
générer ton filtre avec une syntaxe sympa du genre :

execute_only_if :condition?, :method

Tu sais, l’idée du plugin auto-magique est quand même à retenir, Ã
partir du
moment où tu constates que tu répètes fréquemment du code sur différents
projets, ça peut être une bonne façon de DRY-er tes projets.

Il n’y a pas de petit profit ^^.