ActiveRecord :: RecordInvalid: проверка не удалась: ключ не может быть пустым - PullRequest
0 голосов
/ 15 апреля 2019

После обновления до Rails 4.0 я получаю эту ошибку.

ActiveRecord::RecordInvalid (Validation failed: Key can't be blank):
  app/models/users_setting.rb:25:in `update_value'
  app/controllers/management_reports/employee_onboarding_controller.rb:35:in `update_filter_values'
  app/controllers/management_reports/employee_onboarding_controller.rb:57:in `prepare_to_read_data'
  app/controllers/management_reports/employee_onboarding_controller.rb:11:in `index'

Это метод:

def update_value options={}
  binding.pry
    self.update_attributes!({:value => options.inspect})
  end

Прай показывает мне это:

[5] pry(#<UsersSetting>)> self.update_attributes!({:value => options.inspect})
   (5.0ms)  BEGIN
   (5.0ms)  BEGIN
   (4.8ms)  ROLLBACK
   (4.8ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Key can't be blank
from /Users/justinhung/.rvm/gems/ruby-2.1.10/gems/activerecord-4.0.0/lib/active_record/validations.rb:57:in `save!'
[6] pry(#<UsersSetting>)> options
=> {:status=>"-1", :client_id=>"-100"}
[7] pry(#<UsersSetting>)> :value
=> :value
[8] pry(#<UsersSetting>)> value
=> "{:status=>\"-1\", :client_id=>\"-100\"}"
[9] pry(#<UsersSetting>)> :value => options.inspect
SyntaxError: unexpected =>, expecting end-of-input
:value => options.inspect
         ^
[9] pry(#<UsersSetting>)> options.inspect
=> "{:status=>\"-1\", :client_id=>\"-100\"}"
[10] pry(#<UsersSetting>)> options
=> {:status=>"-1", :client_id=>"-100"}

Не уверен, как поступить, любая помощь будет оценена.

1 Ответ

2 голосов
/ 15 апреля 2019

См. options сам по себе является хешем, поэтому вам просто нужно передать опции try,

self.update_attributes!(options)

, где status и client_id являются атрибутами модели.

Ключ не может быть пустым, а значение не может быть пустым, если появляются сообщения об ошибках проверки рельсов, возможно, для этих двух полей установлено значение true.

Если вы хотите пропустить проверку, вы можете сделать следующее, чтобы при обновлении рельсы не кричали о наличии ключа и значения.

def update_value options={}
  self.status = options[:status]
  self.client_id = options[:client_id]
  self.save(validate: false)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...