相关疑难解决方法(0)

验证多列的唯一性

是否有一种轨道方式来验证实际记录是唯一的而不仅仅是一列?例如,友谊模型/表不应该具有多个相同的记录,例如:

user_id: 10 | friend_id: 20
user_id: 10 | friend_id: 20
Run Code Online (Sandbox Code Playgroud)

validation activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord

188
推荐指数
2
解决办法
7万
查看次数

可以在Rails/ActiveRecord中指定允许带NULL的唯一索引吗?

我想在列上指定唯一索引,但我还需要允许NULL值(多个记录可以包含NULL值).使用PostgreSQL进行测试时,我发现我可以拥有一条带有NULL值的记录,但下一个会导致问题:

irb(main):001:0> u=User.find(5)
  User Load (111.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 5]]
=> #<User id: 5, email: "a@b.com", created_at: "2013-08-28 09:55:28", updated_at: "2013-08-28 09:55:28">
irb(main):002:0> u.email=nil
=> nil
irb(main):003:0> u.save
   (1.1ms)  BEGIN
  User Exists (4.8ms)  SELECT 1 AS one FROM "users" WHERE ("users"."email" IS NULL AND "users"."id" != 5) LIMIT 1
   (1.5ms)  ROLLBACK
=> false
Run Code Online (Sandbox Code Playgroud)

因此,即使数据库允许,Rails也会首先检查是否User存在具有不同id且email列设置为NULL.有没有一种方法,不仅数据库可以允许它,但Rails也不会像上面那样先检查?

这个想法是用户不必输入电子邮件,但如果他们这样做,我需要能够通过他们的电子邮件找到用户.我知道我可以创建另一个模型来将用户与电子邮件相关联,但我更愿意以上述方式进行操作.

更新:这是我为添加email列而创建的迁移代码:

class …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord

31
推荐指数
2
解决办法
1万
查看次数