gpt4 book ai didi

ruby-on-rails - 多列唯一 Rails 索引无法正常工作

转载 作者:行者123 更新时间:2023-11-29 13:48:28 25 4
gpt4 key购买 nike

我正在努力解决这个问题:

我有一个 User 模型,其中包含一个电子邮件和一个他们可以用来登录的辅助电子邮件。用户不应与其他用户拥有相同的电子邮件/辅助电子邮件。这两列也应该是相互唯一的。

发生了什么

但是,我的索引只验证它们自己列中的唯一性。因此,一个用户不能拥有与另一个用户相同的电子邮件,并且他们不能拥有与另一个辅助电子邮件相同的辅助电子邮件。


确保两列自身唯一的索引,并为email和secondary email添加唯一索引

The index that ensures the two columns are unique with themselves

但是索引不能跨两列工作 But I should not be able to have another user's email as my secondary email

期望值

用户不应将数据库中存在的电子邮件用作电子邮件或辅助电子邮件。


迁移.rb

class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
t.string :email, null: false
t.string :secondary_email
t.timestamps
end
add_index :users, [:email, :secondary_email], unique: true
add_index :users, [:secondary_email, :email], unique: true
add_index :users, :secondary_email, unique: true
add_index :users, :email, unique: true
end
end

我已经尝试了索引排列的所有组合。如果没有底部的单个索引,用户可以拥有相同的 email,只要他们的 secondary_email 是唯一的。

最佳答案

A user should not be able to use an email that exists in the database as a email or secondary email

我能想到的避免这种情况的唯一方法是进行自定义验证。像下面这样的东西应该可以工作

class User < ActiveRecord::Base
validate :verify_unique_email_or_secondary_email

def verify_unique_email_or_secondary_email
if User.exists?("email = ? OR secondary_email = ?", email,email)
errors.add(:email, 'Email or Secondary Email has already been taken')
end
end
end

关于ruby-on-rails - 多列唯一 Rails 索引无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com