Je connais pas Inherited_resources mais en overridant la méthode
"collection" dans ton contrôleur tu ne peux pas lui fournir exactement
ce que tu veux comme collection (à la place d'utiliser les méthodes
begin/end_of_assocation_chain) ?

2011/7/27 Ralphb <[email protected]>:
>
> Bonjour,
> Dans le cadre d'une manipulation pour démonstration sur de la "reprise
> d'un code", j'ai eu besoin de créer un scope qui ne fait rien (scope
> idempotent). Cela fonctionne mais ne trouvant rien dans la
> documentation je me demande si cela est prévu ou risqué et donc votre
> avis là dessus. Nous avons de plus discuté d’autres usages de cette
> technique (par exemple commencer le code en décrivant les requêtes
> avec des scopes avant d’avoir toutes les informations sur la BDD dans
> le cas d'une refonte, d'un dev incrémental ou d'un client qui ne peut
> tout fournir à l'heure).
>
> Si besoin je joins un exemple de la démonstration, mais la question
> n’est pas liée à l’exemple (que je ferais différemment si j’avais à le
> faire « en vrai »), seulement à l'utilisation d'un scope "vide"
>
> Exemple :
> J'ai un objet Company, dans un contrôleur utilisant
> InheritedRessource. La gestion des droits d'accès à l'objet Company
> est fait dans cet objet pour des raisons historiques (et si on décide
> de refaire cela proprement l’exemple n’a plus de sens…), plus
> clairement on a :
> class Company < ActiveRecord::Base
>  scope :accessible_by_user, lambda { |user|
>          <... construit un scope renvoyant toutes les companies
> accessible par cet utilisateur à ce jour>
> }
> ...
> end
> Le problème c’est que InheritedRessource, lorsqu’on lui spécifie une «
> begin_of_association_chain » ajoute de lui même le nom de la
> collection après. Par exemple dans ce cas en définissant
>
> def begin_of_association_chain
>   Company.accessible_by_user(@current_user)
> end
>
> InheritedRessource recherchera :
> Company.accessible_by_user(@current_user).companies
> et companies n’est pas défini pour l’objet ActiveRecord::Relation
> renvoyé.
>
> D'ou l'utilisation d'un scope vide :
> scope :companies
> Ce qui fonctionne.
>
> Note : En temps normal j’aurais simplement résolu le pb ainsi :
> class User < ActiveRecord::Base
>        def companies
>                Company. accessible_by_user(self)
>        end
> end
>
> def begin_of_association_chain
>  @current_user
> end
>
> Dans le controlleur, mais l'objet user a déjà une relation companies
> définie sur l'objet Company qui ne correspond pas à ses droits d'accès
> à cet objet. Et... La question est sur le scope vide !
>
> Merci.
>
> Raphaël.
>
> --
> 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]



-- 
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]

Répondre à