J'ai un Rails 3, du projet. Avec Rails 3 est venu Arel et la possibilité de réutiliser un champ d'application à construire une autre. Je me demande si il existe un moyen d'utiliser des étendues lors de la définition d'une relation (par exemple, un "has_many").
J'ai des dossiers qui ont l'autorisation de colonnes. Je voudrais construire un default_scope qui prend ma permission colonnes en considération, de sorte que les enregistrements (y compris ceux accessibles via un lien) sont filtrés.
Actuellement, dans Rails 3, default_scope (y compris les patchs que j'ai trouvé) ne donnent pas une pratique les moyens de passer à un proc (dont j'ai besoin pour la fin de l'variable de liaison). Est-il possible de définir un has_many dans laquelle un nom de champ peut être adoptée?
L'idée de la réutilisation d'une étendue nommée ressemblerait à:
Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)}
has_many :orders, :scope => Orders.my_orders
Ou implicitement de codage, le nom de champ dans la relation ressemblerait à:
has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)}
J'essaye simplement d'appliquer default_scope avec la liaison tardive. Je préfère utiliser un Arel approche (si il y en a un), mais l'utilisation de toute option viable.
Depuis que je suis en se référant à l'utilisateur actuel, je ne peux pas compter sur des conditions qui ne sont pas évalués au dernier moment possible, tels que:
has_many :orders, :conditions => ["user_id = ?", User.current_user.id]