Est-il possible de créer une association conditionnelle avec DataMapper?DataMapper a n avec des conditions
Par exemple:
Je veux que l'utilisateur n Apps juste si cet utilisateur a l'attribut :developer => true
quelque chose comme ceci:
class User
include DataMapper::Resource
property :id, Serial
property :name, String, :nullable => false
property :screen_name, String, :nullable => false, :unique => true
property :email, String, :nullable => false, :unique => true, :format => :email_address
property :password, BCryptHash, :nullable => false
property :developer, Boolean, :default => false
#The user just gets apps if developer
has n :apps #,:conditions => "developer = 't'"
end
class App
include DataMapper::Resource
property :id, Serial
property :name, String, :nullable => false
belongs_to :user
end
Je sais que ce serait possible en créant une sous-classe de l'utilisateur en tant que développeur :: utilisateur et dans cette classe, utilisez le has n
, mais j'aimerais vraiment savoir s'il est possible de le faire directement sur la déclaration d'association.
Une autre façon que j'ai également réussi à faire en utilisant ARn était d'étendre l'association et de réécrire les méthodes pour chaque action.
donc sur le module d'extension je pourrais avoir quelque chose comme ceci:
module PreventDeveloperActions
def new
if proxy_owner.developer?
super
else
raise NoMethodError, "Only Developers can create new applications"
end
end
# and so on for all the actions ...
end
Mais encore une fois, je voudrais vraiment éviter l'utilisation de ces solutions si possible, mais juste s'il est possible d'effectuer une rapide et méthode directe facilement avec DataMapper :)
Merci à l'avance
Salut Dan, merci beaucoup pour votre attention et votre soutien, C'est vraiment apprécié :) Je vais essayer ces méthodes que vous avez mentionnées, mais je suis sûr que cela va résoudre mon problème :) merci encore – zanona