我想实现一个功能,用户可以在其个人资料中“添加其他详细信息”。在这里,他应该能够为细节和实际细节创建标签,如:
Education : Degree
其中教育是细节的标签,而学位是细节。
除此之外,他还应该可以选择是否应该visible
或hidden
来确定此详细信息。
如何使用具有关联User has_one Profile的新模型Profile实现此功能。
如果我只有新的详细信息的标签和文字,我本可以尝试hash
,但因为我还必须从用户那里获取用户是否希望隐藏细节或可见,我可能需要一个额外的字段来存储该值(true或false)。
我真的很困惑,我怎么能把整个事情一起实施。
请建议我如何实现此功能,以及每次用户创建新详细信息时如何更新模型而不更改数据库的schema
。
我正在研究Rails 3.2。
答案 0 :(得分:2)
我没有真正看到你的问题(或者我没有得到它),但是:
为什么不用AdditionalData
创建一个has_many user_id:integer name:string content:string visible:boolean
?
因此,您可以遍历@user.additional_datas.visible
(假设您定义了范围scope :visible, where("visible = 1")
。
增加了好处:您可以将此模型变为多态并将其他信息添加到应用中的其他内容,而无需为要存储这些内容的每个模型创建额外的“信息”表。
对于验证,您还可以添加data_type
字段并根据数据类型创建验证(需要是网址,电话号码,只是文字......)
答案 1 :(得分:1)
我也没有看到问题;我认为类似哈希的表可能是解决方案,如下所示:
rails generate model UserDetails label:string value:string \
visible:boolean user:references
你可以在其中放置这样的记录:
user.details.create(:label => 'Dog name', :value => 'Fuffy' :visible => false)