我如何在Rails中实现这一点?

时间:2012-03-02 11:41:38

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 model

我想实现一个功能,用户可以在其个人资料中“添加其他详细信息”。在这里,他应该能够为细节和实际细节创建标签,如:

Education : Degree 

其中教育是细节的标签,而学位是细节。

除此之外,他还应该可以选择是否应该visiblehidden来确定此详细信息。

如何使用具有关联User has_one Profile的新模型Profile实现此功能。

如果我只有新的详细信息的标签和文字,我本可以尝试hash,但因为我还必须从用户那里获取用户是否希望隐藏细节或可见,我可能需要一个额外的字段来存储该值(true或false)。

我真的很困惑,我怎么能把整个事情一起实施。

请建议我如何实现此功能,以及每次用户创建新详细信息时如何更新模型而不更改数据库的schema

我正在研究Rails 3.2。

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)