ActiveRecord ::RecordInvalid: ошибка проверки: ключ не может быть пустым

#ruby-on-rails #ruby #activerecord

#ruby-on-rails #ruby #activerecord

Вопрос:

После обновления до 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
 

pry показывает мне это:

 [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. Что вы ожидаете от этого? self.update_attributes!({:value => options.inspect})

2. Не могли бы вы опубликовать схему таблицы

3. С какой версии вы обновили свое приложение Rails? Вы обновили только версию Rails или вы тоже изменили какой-либо код? Какие проверки существуют в этой модели?

4. Существует проверка, которая UserSetting должна иметь key . Наши options не включают значение для a key ? key Уже установлен на UserSetting ?

5. Вероятно, это связано с тем, что отношения belongs_to стали обязательными с RoR 4. Вы забыли установить связанную запись?

Ответ №1:

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

 self.update_attributes!(options)
 

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

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

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

 def update_value options={}
  self.status = options[:status]
  self.client_id = options[:client_id]
  self.save(validate: false)
end
 

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

1. к сожалению, это не работает, я получаю сообщение об ошибке : Validation failed: Key can't be blank, Value can't be blank .