#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
не включают значение для akey
?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
.