好。我是DataMapper的新手。我一直在努力阅读文档并理解它与我几小时内想要完成的事情相关,但对于像我这样的ADD人来说,这真是太棒了。谷歌没有太多的帮助 - 也就是说,我不确定如何将我的问题复杂化为查询格式。所以我问这个问题是为了得到一个答案并能继续我的项目,但我也痴迷于想要绕过这个问题。如此。
所有注册的用户都会获得一个帐户。该帐户有一个用户名,电子邮件和密码字段,基本的东西。模型本身,即那些属性,工作正常(我理解那么多)。
但是,根据用户的识别方式,他们也可能是艺术家,场地或粉丝。由于这些标识的巨大差异,每个标识都有自己的模型。因此,当用户获得帐户时,他还需要插入艺术家,场地或粉丝模型。用户不能是其中两个,只能是一个。
我的问题是如何设置这种类型的关联。我在想has 1, :artist OR has 1, :venue OR has 1, :fan
,但我不认为这是支持的。但是你明白了。
我也想过,好吧,f ***它,我只会给一个帐户n
艺术家和n
场地和n
粉丝,但只插入一条记录到相关模型。但这似乎是一个糟糕的,臃肿的解决方法。
有没有正确的方法来做到这一点,或者至少是最好的方式?提前谢谢你,我希望我能很好地解释自己。
答案 0 :(得分:0)
您的用户可以拥有与之相关的艺术家,地点或粉丝模型,因此您需要以下内容:
class User
# ...
has 1, :artist
has 1, :venue
has 1, :fan
# ...
end
接下来,您的用户最多只能与艺术家,场地或粉丝相关联,因此您需要对这些模型进行一些额外的验证:
class Artist
belongs_to :user
validates_with_method :user_has_no_venue_or_fan
def user_has_no_venue_or_fan
if user.fan || user.venue
[false, "Your custom error message..."]
else
true
end
end
end
您将对Fan
和Venue
模型进行类似的验证。
通过这种方式,您的用户类可以与场地,粉丝或艺术家模型相关联,但这些模型上的验证将确保用户不会与多个模型相关联。
如果您想通过该用户轻松访问您的识别模型,您可以在用户中编写一个方法,如下所示:
class User
def placeholder_method_name
artist || venue || fan
end
end