Атрибут не обновляется, хотя не отображается откат

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

Я обновляю атрибут (‘estado’) в приложении Rails, сообщений об ошибках нет. Отката нет, и ответ метода update даже true. Когда я проверяю запись, атрибут имеет старое значение.

 [1] pry(#<Users::RegistrationsController>)> resource
=> #<User id: 18, email: "password2@mail.com", created_at: "2019-04-22 10:37:55", updated_at: "2019-04-22 10:37:55", shop_id: nil, seller: false, first_name: nil, last_name: nil, birthday: nil, nationality: nil, document_type: nil, document_number: nil, expiring_date: nil, estado: "pending", admin: false, provider: nil, uid: nil, facebook_picture_url: nil, token: nil, token_expiry: nil>

[2] pry(#<Users::RegistrationsController>)> resource.estado = "Accepted"
=> "Accepted"

[3] pry(#<Users::RegistrationsController>)> resource
=> #<User id: 18, email: "password2@mail.com", created_at: "2019-04-22 10:37:55", updated_at: "2019-04-22 10:37:55", shop_id: nil, seller: false, first_name: nil, last_name: nil, birthday: nil, nationality: nil, document_type: nil, document_number: nil, expiring_date: nil, estado: "pending", admin: false, provider: nil, uid: nil, facebook_picture_url: nil, token: nil, token_expiry: nil>

[4] pry(#<Users::RegistrationsController>)> resource.save
   (0.3ms)  BEGIN
  ↳ (pry):27
  User Exists (0.8ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = $1 AND "users"."id" != $2 LIMIT $3  [["email", "password2@mail.com"], ["id", 18], ["LIMIT", 1]]
  ↳ (pry):27
  User Update (2.3ms)  UPDATE "users" SET "encrypted_password" = $1, "updated_at" = $2 WHERE "users"."id" = $3  [["encrypted_password", "$2a$11$Pa2Dw8s53F8JSiO617Brxu2zuogK/Mffecokx0iKPnNJkVj05ZqsO"], ["updated_at", "2019-04-22 10:45:50.987192"], ["id", 18]]
  ↳ (pry):27
   (6.0ms)  COMMIT
  ↳ (pry):27
=> true

[5] pry(#<Users::RegistrationsController>)> resource
=> #<User id: 18, email: "password2@mail.com", created_at: "2019-04-22 10:37:55", updated_at: "2019-04-22 10:45:50", shop_id: nil, seller: false, first_name: nil, last_name: nil, birthday: nil, nationality: nil, document_type: nil, document_number: nil, expiring_date: nil, estado: "pending", admin: false, provider: nil, uid: nil, facebook_picture_url: nil, token: nil, token_expiry: nil>

[6] pry(#<Users::RegistrationsController>)> 
  

Комментарии:

1. Можете ли вы добавить свою пользовательскую модель к вопросу?

Ответ №1:

Ваш атрибут не обновляется в экземпляре на шаге 2 (см. в 3), это означает, что с настройщиком что-то не так.

Это может быть из-за:

  1. attr_accessor / attr_writer для :estado
  2. пользовательский установщик estado= не вызывается super(new_value)