生成了一個類associable:references{polymorphic}
因此模式具有:
t.string "associable_type", null: false
t.bigint "associable_id", null: false
rails自動生成的fixture有:
associable: one
associable_type: Associable
嘗試修改固定裝置以反映架構:
associable_id: 4
associable_type: Chain
下面的測驗
test "valid " do
contact = Contact.new(associable_id: 2, associable_type: 'User')
puts contact.valid?
puts contact.errors.inspect
assert contact.valid?
end
回傳
false
#<ActiveModel::Errors [#<ActiveModel::Error attribute=associable, type=blank, options={:message=>:required}>]>
根據自動生成的語法將測驗更改為contact = Contact.new(associable: two, associable_type: 'User')
抱怨NameError: undefined local variable or method 'two'
如何正確測驗多型記錄?
uj5u.com熱心網友回復:
夾具是創建的資料,您可以對其進行測驗。詳細了解可以參考https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html。在我們的例子中,我們不需要修改固定裝置。
我們在測驗用例中遇到的錯誤是因為我們沒有在用戶表中創建記錄。因此,當它嘗試驗證記錄時,它會檢查帶有提到的 id 的記錄associable_id: 2(在我們的例子中為 2)是否存在于 users 表中。
您可以修改測驗用例如下
test "valid " do
user = User.new(name: 'Jerome', email: 'jerome@gmail.com')
user.save
Contact.new(associable: user)
puts contact.valid?
puts contact.errors.inspect
assert contact.valid?
end
注意:我沒有添加其他列,因為我不知道您的用戶和聯系人架構。如果有,請添加列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/497842.html
上一篇:輸入值未定義?
下一篇:Ruby-根據條件更改值
