mwi*_*ock 2 ruby datamapper ruby-datamapper
我是DataMapper的新手,我正在尝试为以下场景创建模型:
我有很多用户(用户名,密码等),也可以是玩家或裁判,或者两者兼而有(因此不能选择单表继承).基础模型将是:
class User
include DataMapper::Resource
property :id, Serial
# Other user properties go here
end
class Player
include DataMapper::Resource
property :id, Serial
# Other player properties go here
# Some kind of association goes here
end
class Referee
include DataMapper::Resource
property :id, Serial
# Other referee properties go here
# Some kind of association goes here
end
DataMapper.finalize
Run Code Online (Sandbox Code Playgroud)
不过,我不确定添加到播放器和裁判的关联类型.有了belongs_to :user,多个玩家可以与同一个用户相关联,这在我的上下文中没有意义.在RDBMS术语中,我想我想要的是对玩家和裁判员表中的外键的唯一约束.
我如何在DataMapper模型中完成此操作?我是否必须在验证中自行执行检查?
有不同的方法可以做到这一点.这是一个选项:
class User
include DataMapper::Resource
property :id, Serial
# Other properties...
has 1, :referee, :required => false
has 1, :player, :required => false
end
class Referee
include DataMapper::Resource
# DON'T include "property :id, Serial" here
# Other properties...
belongs_to :user, :key => true
end
class Player
include DataMapper::Resource
# DON'T include "property :id, Serial" here
# Other properties...
belongs_to :user, :key => true
end
Run Code Online (Sandbox Code Playgroud)
对裁判/球员模特的行为如下:
u = User.create(...)
u.referee = Referee.create(...)
u.player = Player.create(...)
u.player.kick_ball() # or whatever you want to call
u.player.homeruns
u.referee.flag_play() # or whatever.
Run Code Online (Sandbox Code Playgroud)
看看这是否有效.我实际上没有测试过,但它应该是好的.