Rails 为 has_one 关系创建了许多对象
Rails creates many objects for has_one relationship
我的 Rails 5 应用程序中有两个模型 - User
和 Login
具有以下关联:
class User < ApplicationRecord
belongs_to :login, optional: true
end
class Login < ApplicationRecord
has_one :user
end
我认为这样的关联会阻止登录拥有多个用户,但事实证明,在 Login.last
已经有关联的用户对象的情况下:
2.4.5 :108 > Login.last.user
=> #<User id: 1, type: "Registrant", login_id: 43, first_name: "test", last_name: "test", created_at: "2022-02-11 11:22:25", updated_at: "2022-02-11 11:22:25">
您仍然可以使用相同的登录名创建新用户:
User.create(first_name: 'test2', last_name: 'test2', login_id: 43
=> #<User id: 2, login_id: 43, first_name: "test2", last_name: "test2", created_at: "2022-02-11 12:03:36", updated_at: "2022-02-11 12:03:36">
但是当您尝试获取最后登录的用户时,您将获得第一个创建的用户:
Login.last.user
=> #<User id: 1, type: "Registrant", login_id: 43, first_name: "test", last_name: "test", created_at: "2022-02-11 11:22:25", updated_at: "2022-02-11 11:22:25">
如何防止使用已经使用过一次的登录名创建新用户?
您可以使用验证来表示登录只能由一个用户使用。
这在模型用户中看起来像这样:
validates :login_id, uniqueness: true
我的 Rails 5 应用程序中有两个模型 - User
和 Login
具有以下关联:
class User < ApplicationRecord
belongs_to :login, optional: true
end
class Login < ApplicationRecord
has_one :user
end
我认为这样的关联会阻止登录拥有多个用户,但事实证明,在 Login.last
已经有关联的用户对象的情况下:
2.4.5 :108 > Login.last.user
=> #<User id: 1, type: "Registrant", login_id: 43, first_name: "test", last_name: "test", created_at: "2022-02-11 11:22:25", updated_at: "2022-02-11 11:22:25">
您仍然可以使用相同的登录名创建新用户:
User.create(first_name: 'test2', last_name: 'test2', login_id: 43
=> #<User id: 2, login_id: 43, first_name: "test2", last_name: "test2", created_at: "2022-02-11 12:03:36", updated_at: "2022-02-11 12:03:36">
但是当您尝试获取最后登录的用户时,您将获得第一个创建的用户:
Login.last.user
=> #<User id: 1, type: "Registrant", login_id: 43, first_name: "test", last_name: "test", created_at: "2022-02-11 11:22:25", updated_at: "2022-02-11 11:22:25">
如何防止使用已经使用过一次的登录名创建新用户?
您可以使用验证来表示登录只能由一个用户使用。 这在模型用户中看起来像这样:
validates :login_id, uniqueness: true