Ruby on rails 将电子邮件范围限定到Desive rails中的子域

Ruby on rails 将电子邮件范围限定到Desive rails中的子域,ruby-on-rails,devise,Ruby On Rails,Devise,我正在rails应用程序中使用Desive进行身份验证,我的应用程序可以有许多子域。 目前它使用电子邮件作为身份验证,电子邮件对于整个应用程序来说应该是唯一的 现在有什么方法可以将电子邮件地址的唯一性范围扩大到子域,而不是整个应用程序? 我试过: 但是没有起作用。在注册新用户时,它仍然寻求整个应用程序的电子邮件的唯一性,而不是特定的子域 非常感谢您的帮助。您是如何保存用户的,您是否在尝试保存之前在用户模型上设置了帐户?如果没有,那么您将对帐户id为nil的帐户进行范围限定-因此看起来没有范围。好

我正在rails应用程序中使用Desive进行身份验证,我的应用程序可以有许多子域。 目前它使用电子邮件作为身份验证,电子邮件对于整个应用程序来说应该是唯一的

现在有什么方法可以将电子邮件地址的唯一性范围扩大到子域,而不是整个应用程序? 我试过:

但是没有起作用。在注册新用户时,它仍然寻求整个应用程序的电子邮件的唯一性,而不是特定的子域


非常感谢您的帮助。

您是如何保存用户的,您是否在尝试保存之前在用户模型上设置了帐户?如果没有,那么您将对帐户id为nil的帐户进行范围限定-因此看起来没有范围。

好的,我这样做了
在designe.rb中编辑的config.authentication\u密钥为

config.authentication_keys = [ :login, :account_id ]
此外,我还创建了隐藏字段,以便在登录表单中包含帐户id

<%= f.hidden_field :account_id, :value => @account.id %>
如果有更好的解决方案,请随意评论

干杯

用户表中存储的子域名在哪里?我有存储子域名的帐户模型。而且帐号与用户模型有很多关系。我在我的用户模型中尝试了上述验证的唯一性,但没有成功..:(请您添加模型(帐户、用户)的基本要点和关系(有很多,属于)在它们和它们存储的相关属性之间?这里是:是否有一种方法可以从子域中找到它,而不是将帐户id放在表单上?对于较大的应用程序,公开帐户id是不舒服的。:-\n如何使用帐户id限定范围的用户电子邮件进行确认?
<%= f.hidden_field :account_id, :value => @account.id %>
protected
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
login = conditions.delete(:login)
account_id = conditions.delete(:account_id)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).where("account_id = ?", account_id).first
end