【发布时间】:2016-01-01 09:25:00
【问题描述】:
我正在尝试为应用程序数据库添加种子,但出现以下错误:
ActiveRecord::AssociationTypeMismatch: Role(#97332160) expected,
got Fixnum(#76482890)
这里是我schema.rb关于两个表相关问题的部分:
create_table "roles", force: :cascade do |t|
t.string "role", limit: 50, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "first_name", limit: 100, null: false
t.string "surname", limit: 100, null: false
t.string "email", limit: 255
t.integer "role_id", limit: 11
t.string "password", limit: 150
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "users", ["first_name"], name: "index_users_on_first_name", using: :btree
add_index "users", ["role_id"], name: "index_users_on_role_id", using: :btree
add_index "users", ["surname"], name: "index_users_on_surname", using: :btree
add_foreign_key "users", "roles"
这是我的seeds.rb 命令:
rl = Role.create(role: "root")
User.create(first_name: "Edvaldo", surname: "Silva de Almeida Júnior", email: "edvaldo@my.domain.com", role_id: rl.id, password: "my_password")
rl = Role.create(role: "admin")
User.create(first_name: "Daiely", surname: "Fanchin", email: "daiely@my.domain.com", role_id: rl.id, password: "other_password")
rl = Role.create(role: "user")
User.create(first_name: "César", surname: "Silva", email: "cesar@my.domain.com", role_id: rl.id, password: "yet_other_password")
我发现a question 接受的答案建议我应该这样做:
rl = Role.create(role: "root")
User.create(first_name: "Edvaldo", surname: "Silva de Almeida Júnior", email: "edvaldo@my.domain.com", role_id: Role.find(rl.id), password: "my_password")
我试过了,但得到了同样的错误!此外,我使用role_id 作为关联,而不是角色本身。所以,就我而言,它应该收到Fixnum,而不是Role。
【问题讨论】:
-
感谢您的友好纠正,@Drenmi。
-
而不是
role_id: Role.find(rl.id)你可以试试role: r1 -
请发布关联
add_foreign_key "users", "roles"这将添加role_id无需单独写t.integer "role_id", limit: 11 -
试过了,@Rots,但现在我得到 ActiveRecord::UnknownAttributeError: unknown attribute 'role' for User。
-
你是说模特,@RajarshiDas?
标签: ruby-on-rails ruby activerecord seeding