如何定义“独特” Ruby on Rails 3 中 MySQL 表列的约束?
我有一个简单的 MySQL 表,其中有一列:name
。
我想在此列上定义一个唯一约束。
我可以这样做:
class MyModel < ActiveRecord::Base
validates_uniqueness_of :my_column_name
end
但它只能在应用程序级别工作,而不能在数据库级别工作。
你有什么建议?
I have a simple MySQL table with one column: name
.
I would like to define a unique constraint on this column.
I can do:
class MyModel < ActiveRecord::Base
validates_uniqueness_of :my_column_name
end
but it will work only at the application level, not at the database level.
What would you suggest ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用以下方法向数据库本身添加唯一约束:
...通过迁移(并且您可能希望使 my_column_name 也不接受任何空值:
Add a unique constraint to the database itself using:
...through a migration (and you might want to make that my_column_name not accept any null values too:
这并不是非常有帮助,但看起来对于在数据库级别强制执行唯一性没有一个很好的答案。来自 Rails 迁移指南:
如果您确实想在数据库中强制执行唯一性,那么使用 ActiveRecord 执行方法自行运行 SQL 命令看起来可能是最好的方法。
This is not super-helpful, but it looks like there is not a great answer for enforcing uniqueness at the database level. From the Rails migration guide:
It looks like running the SQL command yourself with the ActiveRecord execute method may be the best way to go if you really want to enforce uniqueness in the database.