Salut,

Juste pour dire que j'ai testé drapper et inherited_resources. Ça
fonctionne parfaitement avec ceci :
https://github.com/drapergem/draper#when-to-decorate-objects.

Je suis assez content du résultat et mes vues sont plus propre. J'aime
aussi le decorates_finder.

Pour moi c'est parfait et tout est propre dans ma tête aussi.

Merci pour votre aide.


Le 12 juin 2013 04:59, Nicolas Blanco <[email protected]> a écrit :

> La plupart du temps la recherche est bindé à un formulaire, et il faut
> garder l'état de ce formulaire lorsque la recherche est effectuée,
> même si c'est juste un text field et une check box.
>
> Je fais toujours un modèle type ActiveModel, dans un namespace (par
> exemple Search), le modèle contient la logique de la recherche et une
> méthode d'instance principale qui retourne le scope final de la
> recherche (lorsque c'est du AR/Mongoid, ou bien les résultats Tire
> pour ElasticSearch).
>
> Exemple :
>
> class Search::Doctor < BasicActiveModel # Mon ancienne gem Rails 3 en
> attendant Rails 4 et son ActiveModel::Model
>   attr_accessor :city_id, :doctor_speciality
>   # ...
>
>   def execute
>     doctors = Doctor.with_state(:confirmed)
>
>     doctors = doctors.where(city_id: city_id) if city_id.present?
>     # ... La logique
>     # ...
>     doctors
>   end
> end
>
> Dans le contrôleur de recherche on a deux expose, un pour l'objet de
> recherche initialisé avec les params, pour garder l'état du formulaire
> et un autre avec les résultats.
>
> class SearchesController < ApplicationController
>   expose(:search) { Search::Doctor.new(params[:search]) }
>   expose(:search_results) { search.execute.page(params[:page]) }
>
>   def show
>   end
> end
>
> Pas de variables globales, pas de before_filter ou de code dans
> l'action principale \o/.
>
> Toute la logique de recherche est testée dans une spec Search::DoctorSpec.
>
> Dans la vue le formulaire de recherche est bindé sur search
> (simple_form_for(search, ...)) et  on itère sur les résultats via
> search_results.each { ... }.
>
> Si vous avez d'autres techniques/manières de
> faire/astuces/commentaires je suis preneur :).
>
> Nicolas.
>
> 2013/6/12 thierry henrio <[email protected]>:
> >
> >
> >
> > 2013/6/11 Nicolas Blanco <[email protected]>
> >>
> >> Hey ! Youpi, encore un sujet à troll :D.
> >
> >
> >>
> >> Maintenant quand utiliser un Presenter ? C'est simple ! Exemple : tu
> >>
> >> veux faire l'index du dashboard d'un user lorsqu'il se loggue.
> >>
> >> Ce dashboard doit afficher une dizaine de stats sur le user, voir des
> >> stats globales au site.
> >>
> >> Plusieurs solutions :
> >> * mettre les scopes et le traitement dans le contrôleur/vue : NON
> >> (allo quoi !).
> >> * mettre les scopes et le traitement dans le modèle User : oui mais
> >> non. Pourquoi foutre 15 scopes et/ou méthodes dans ton User qui est un
> >> modèle super critique si c'est juste pour afficher les données dans
> >> une ou deux vues ?
> >> * Presenter : OUI. Une simple classe UserPresenter qui prend le user
> >> en initialize et qui expose une stat par méthode. Et dans ton
> >> contrôleur un joli : expose(:presenter) {
> >> UserPresenter.new(current_user) }. Je pleure tellement c'est beau et
> >> bien isolé et testable :').
> >
> >
> > J'aime bien aussi
> >
> > Et si je prends : "search users" avec les params du post ?
> > Tu vas faire un presenter pour la search ou faire une méthode `search`
> dans
> > le controller ?
> >
> > ?, Thierry
> >
> > --
> > --
> > Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance"
> de
> > Google Groups.
> > Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
> > [email protected]
> > Pour résilier votre abonnement envoyez un e-mail à l'adresse
> > [email protected]
> > ---
> > Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
> > Railsfrance.
> > Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> > concernant, envoyez un e-mail à l'adresse
> > [email protected].
> > Pour plus d'options, visitez le site
> > https://groups.google.com/groups/opt_out .
> >
> >
>
>
>
> --
> Nicolas Blanco, Web developper
>
> http://www.nicolasblanco.fr
> Jabber/GoogleTalk : [email protected]
> Twitter : http://twitter.com/slainer68
> Github : http://github.com/slainer68
> Skype : slainer68
>
> --
> --
> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
> Google Groups.
> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
> [email protected]
> Pour résilier votre abonnement envoyez un e-mail à l'adresse
> [email protected]
> ---
> Vous recevez ce message, car vous êtes abonné au groupe Google
> Groupes Railsfrance.
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse
> [email protected].
> Pour plus d'options, visitez le site
> https://groups.google.com/groups/opt_out .
>
>
>

-- 
-- 
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
--- 
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes 
Railsfrance.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, 
envoyez un e-mail à l'adresse [email protected].
Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .


Répondre à