Tengo dos modelos en mi aplicación Rails 5: User e inicio de Login con la siguiente asociación:
class User < ApplicationRecord belongs_to :login, optional: true end class Login < ApplicationRecord has_one :user end Pensé que tal asociación evitaría que el inicio de sesión tuviera más de un usuario, pero resulta que en el caso de que Login.last ya tenga un objeto de usuario asociado:
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">Todavía puede crear un nuevo usuario con el mismo inicio de sesión:
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">Pero cuando intente obtener el último usuario de inicio de sesión, obtendrá el primer usuario creado:
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">¿Cómo evitar la creación de un nuevo usuario con un inicio de sesión que ya se ha utilizado una vez?
Puede usar la validación para decir que un usuario solo puede usar un inicio de sesión. Esto se verá así en el modelo Usuario:
validates :login_id, uniqueness: true