是否有可能与 DataMapper 创建条件关联?
例如:
我希望用户拥有 n 个应用程序,只要该用户具有该属性:developer => true
像这样的东西:
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
我知道这可以通过从 User 创建一个子类作为 Developer::User 并在该类中使用has n
,但我真的很想知道是否可以直接在关联声明中创建它。
我在使用 ARn 时还设法做的另一种方法是扩展关联并重写每个操作的方法。
所以在扩展模块上我可以有这样的东西:
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
但是,如果可能的话,我真的很想避免使用这种解决方案,但前提是可以使用 DataMapper 轻松执行快速直接的方法:)
提前致谢