Ruby on rails enum.rb中的ArgumentError:139:`assert_valid_value';

Ruby on rails enum.rb中的ArgumentError:139:`assert_valid_value';,ruby-on-rails,activerecord,enums,parameters,casting,Ruby On Rails,Activerecord,Enums,Parameters,Casting,我的问题是为db表实现工作良好的枚举属性。 给定的是以下等级def: class PlayerLicense < ApplicationRecord belongs_to :user belongs_to :team enum defaultDress: { black: 1, white: 2, :substitute => 3 } validates :defaultDress, presence: true,

我的问题是为db表实现工作良好的枚举属性。 给定的是以下等级def:

class PlayerLicense < ApplicationRecord
  belongs_to :user
  belongs_to :team

  enum defaultDress: { black: 1, white: 2, :substitute => 3 }
  validates :defaultDress, 
            presence: true,
            inclusion: { in:  defaultDresses.keys}

  enum defaultPosition: { :defense => 1,  :forwarder => 2,  :center => 3,  :goalie => 4 }
  validates :defaultPosition,
            presence: true,
            inclusion: { in: defaultPositions.keys }

end
在本例中,来自浏览器的参数到目前为止都很好,然后enum.rb assert_valid_值得到正确的值(2),但类型错误(get:string,必须是:integer)。这就是assert\u valid\u值中ArgumentError的原因


在Rails控制台中,一切正常,属性/值分配、验证、object.save/read。检查db级别验证db表中的正确数据记录(从rails控制台发出object.save后)。这到底是什么(Params cast?),有人能帮忙吗,了解一下原因和解决方法吗?谢谢,Harry。

问题似乎在于表单实现。它不是发送枚举键(字符串),而是发送枚举值(整数)

而不是

<%= f.select :defaultDress, PlayerLicense.defaultDresses ... %>

使用



只看了一下这个,但我想知道
{in:defaultDresses.keys}
是否应该是
{in:defaultDresses.values}
.2不是DefaultDressment的有效值,因为您正在分配
defaultDresses.keys
是黑色、白色还是替代的,也许您想使用这些值?到目前为止,thnx作为响应:[all]=>实际上我是从“值”开始的,在尝试“键”之后忘记了回拉到值,这就是为什么会看到“键”。用密码。我同意第一个观点:价值观。令人惊讶的是“值”或“键”-结果没有什么不同:在rails控制台上,它工作得很好,来自浏览器的错误是相同的。请发布您的表单实现thnx以获得迄今为止的响应:[all]=>实际上,我是从“值”开始的,在来回地忘记拉回到“值”之后,这就是您在代码中看到“键”的原因。我同意我们谈论的是“价值观”。令人惊讶的是,“值”或“键”-结果没有区别:在rails控制台上,两种情况(键/值)都工作得很好,从浏览器上看,两种情况都是相同的错误-非常疯狂。HTML到目前为止是正确的,我的意思是,如果您在服务器日志中看到参数,它们是正确和干净的,传递值,userSelect显示键字符串。[Mark Merritt]=>“您是对的,更具体地说(PlayerLicense.defaultDresses与PlayerLicense.defaultDresses.keys)解决了我的问题。非常感谢马克。我决不会那样想,因为使用助手(f.select…)我认为助手做的工作是正确的(已验证)方式-没关系-再次感谢你,干得好..再说一句话:实际上我在服务器端的链数据>转换中看到了真正的原因。与rails控制台逻辑所做的相同((object.defaultDress=“white”)==(object.defaultDress=:white)==(object.defaultDress=2),object.valid?==true,相同的逻辑应适用于服务器(控制器)端接收的参数。Thnx
<%= f.select :defaultDress, PlayerLicense.defaultDresses ... %>
<%= f.select :defaultDress, PlayerLicense.defaultDresses.keys ... %>