Ruby on rails ActiveRecord::RecordInvalid:验证失败:密钥可以';不要空白

Ruby on rails 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

在更新到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"}
[5]pry(#)>self.update_属性!({:value=>options.inspect})
(5.0毫秒)开始
(5.0毫秒)开始
(4.8ms)回滚
(4.8ms)回滚
ActiveRecord::RecordInvalid:验证失败:密钥不能为空
来自/Users/justinhung/.rvm/gems/ruby-2.1.10/gems/activerecord-4.0.0/lib/active_record/validations.rb:57:in“保存!”
[6] 撬动(#)>选项
=>{:status=>“-1”,:client_id=>“-100”}
[7] 撬动(#)>:值
=>:值
[8] 撬(#)>值
=>“{:status=>\”-1\,:客户端id=>\“-100\”}”
[9] 撬动(#)>:值=>options.inspect
SyntaxError:意外=>,应为输入结束
:value=>options.inspect
^
[9] 撬动(#)>选项。检查
=>“{:status=>\”-1\,:客户端id=>\“-100\”}”
[10] 撬动(#)>选项
=>{:status=>“-1”,:client_id=>“-100”}

不知道如何继续,如果您有任何帮助,我们将不胜感激。

请参阅选项本身就是一个散列,因此您只需传递选项,然后重试

self.update_attributes!(options)
其中,状态客户端id是模型属性

Key不能为空和value不能为空是rails验证错误消息,因为您可能为这两个字段设置了presence true

如果您想跳过验证,可以执行以下操作,这样在更新rails时就不会因为键和值的存在而大喊大叫

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

请参见选项本身是一个散列,因此您只需传递选项,然后重试

self.update_attributes!(options)
其中,状态客户端id是模型属性

Key不能为空和value不能为空是rails验证错误消息,因为您可能为这两个字段设置了presence true

如果您想跳过验证,可以执行以下操作,这样在更新rails时就不会因为键和值的存在而大喊大叫

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

你以为这是在干什么<代码>self.update\u属性!({:value=>options.inspect})您可以发布表格的模式吗?您从哪个版本升级了Rails应用程序?您是否只更新了Rails版本,或者是否也更改了任何代码?该模型上有哪些验证?有一个验证,即
用户设置
必须有一个
。我们的
选项
不包括
键的值
是否已在
用户设置
上设置?这可能是因为自RoR 4以来,“属于”关系已成为强制性的。你是不是忘了设定一个相关的记录?你期望这是在做什么<代码>self.update\u属性!({:value=>options.inspect})您可以发布表格的模式吗?您从哪个版本升级了Rails应用程序?您是否只更新了Rails版本,或者是否也更改了任何代码?该模型上有哪些验证?有一个验证,即
用户设置
必须有一个
。我们的
选项
不包括
键的值
是否已在
用户设置
上设置?这可能是因为自RoR 4以来,“属于”关系已成为强制性的。您是否忘记设置相关记录?不幸的是,这不起作用,我得到错误:
验证失败:键不能为空,值不能为空
。不幸的是,这不起作用,我得到错误:
验证失败:键不能为空,值不能为空