首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型设计

模型设计
EN

Stack Overflow用户
提问于 2015-07-19 01:02:36
回答 2查看 60关注 0票数 0

我有一个名为Note的模型,用户可以在该模型中记录不同的主题:

代码语言:javascript
复制
rails g scaffold Note sub1:text sub2:text sub3:text ... user:references

User模型has_one :noteNote模型belongs_to :user

这是正确的吗?如果不是,那么最好的方法是什么呢?

编辑:

让我们说,正如下面的答案所建议的,我将使用户模型has_many注释和Note模型只有两个属性内容:text和subName:string,然后使用作用域,我可以得到属于特定主题的注释,这是一种好方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-19 02:59:47

我认为这是一个很好的方法,如果你只有少数几个主题类型。

Rails现在支持枚举,因此可以查看subject字段的枚举。

根据最终有多少注释,您可能想要在主题字段中添加一个索引。

票数 1
EN

Stack Overflow用户

发布于 2015-07-19 01:17:56

这取决于您的用例。是的,这段代码将运行,但我从您的描述中得到了这样的想法:一个User应该能够有不止一个note。如果是这样的话,您实际上希望在has_many :note模型中使用User关联。

此外,使用编号列作为允许记录的多个值的方法通常是一种不好的做法。相反,您可能希望创建一个Subject模型,并在它与Note 文档之间建立一个has_and_belongs_to_many关联。

编辑以响应OP编辑:是的,您可以这样做。然而,现在你已经失去了为一个音符设置多个主题的能力。但是,如果你只对每个音符只接受一个主题,那么你所拥有的就会起作用,并且比创建一个全新的模型更简单。

但是,一定要注意,这是有缺点的。如果您想搜索所有以“苹果”为主题的帖子,您将不会收到任何用户将"Apples“(大写"A")作为主题,或"apples”(前空格)或" Apples“(尾随空间)等主题的帖子。您可以使用before_save钩子将subject文本规范化,从而克服这一点,但是拼写错误或冗余subject具有相同的语义含义呢?即使使用模型也不容易修复这些问题,但这要容易得多,特别是当您将用户的选择限制在现有主题上时。

您还将要求数据库使用字符串计算作为谓词,如果数据集足够大,该谓词对于在受限的Subject表上执行联接可能有性能缺陷,也可能没有。

最后,无论是哪种方式,如果要使用该列搜索特定的Note记录,则应该为其创建一个索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31497024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档