没有明确要求Rails belongs_to,但模型需要它。为什么?

时间:2016-08-04 10:07:50

标签: ruby-on-rails activerecord

我的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

Enum澄清

虽然# == 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

2 个答案:

答案 0 :(得分:1)

看起来好像Rails 5默认需要belongs_to,我编辑了以下行,并修复了它:

belongs_to :user, required: false

Source

答案 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}}字段,您的记录应该有效,因此保存。