我的Account
模型只有一个not null
字段在我的控制之下:account_type
并且在设置之后,它仍然赢得了.save
,要求有效{ {1}}。有什么想法吗?
.user
此外,向>> a = Account.new
>> a.account_type = :user
>> a.valid? #=> false
>> a.save
(0.2ms) BEGIN
(0.2ms) ROLLBACK
=> false
>> a
=> #<Account id: nil, balance: #<BigDecimal:7f23fc3e2d68,'0.0',9(18)>, account_type: "user", user_id: nil, created_at: nil, updated_at: nil>
>> a.errors.messages
=> {:user=>["must exist"]}
添加有效用户会使其验证:
Account
但2.3.1 :023 > user = create(:user) # factory girl creates this for me
2.3.1 :024 > a.user = user
2.3.1 :025 > a.valid?
=> true
不应该被要求!
这里包括整个模型,包括架构:
Account.user
虽然# == Schema Information
#
# Table name: accounts
#
# id :integer not null, primary key
# balance :decimal(, ) default(0.0)
# account_type :integer not null
# user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
# accounts and their associated balances
class Account < ApplicationRecord
belongs_to :user
has_many :transactions
enum account_type: {
user: 1,
deposit: 2,
withdrawal: 3,
fees: 4
}
end
看起来像是一个字符串,但它不是。如果您阅读模型,我实际上已经在其上映射了枚举值,这非常漂亮,因为它允许我向模型发送和接收字符串/符号,但在数据库中保存为整数,使搜索更快
了解更多here
答案 0 :(得分:1)
答案 1 :(得分:0)
查看您的架构,我可以看到account_type
应该是Integer
。您正尝试将account_type
保存为String
,请参阅&#34;用户&#34;。
#<Account id: nil, balance: #<BigDecimal:7f23fc3e2d68,'0.0',9(18)>, account_type: "user", user_id: nil, created_at: nil, updated_at: nil>
这是您在致电false
时记录退货valid?
的原因。
在分配account_type
时尝试这样的事情:
a.account_type = account_type[:user]
我正在访问您的Enums
,该account_type
应指定&#39; 1&#39;到{{1}}字段,您的记录应该有效,因此保存。