我有一个名为Note的模型,用户可以在该模型中记录不同的主题:
rails g scaffold Note sub1:text sub2:text sub3:text ... user:referencesUser模型has_one :note和Note模型belongs_to :user
这是正确的吗?如果不是,那么最好的方法是什么呢?
编辑:
让我们说,正如下面的答案所建议的,我将使用户模型has_many注释和Note模型只有两个属性内容:text和subName:string,然后使用作用域,我可以得到属于特定主题的注释,这是一种好方法吗?
发布于 2015-07-19 02:59:47
我认为这是一个很好的方法,如果你只有少数几个主题类型。
Rails现在支持枚举,因此可以查看subject字段的枚举。
根据最终有多少注释,您可能想要在主题字段中添加一个索引。
发布于 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记录,则应该为其创建一个索引。
https://stackoverflow.com/questions/31497024
复制相似问题