我正在将Ruby从版本2.3更新到2.4并使用Rails 5,使用mysql数据库创建一个新的应用程序。
rails new myapp1 -d mysql
然后我创建了两个模型,如用户和角色
rails g model Users username:string
rails g model Roles rolename:string
之后,我创建了一个用于连接模型的迁移
rails g migration CreateRolesUsers users:references roles:references
然后我在模型上定义关系如下
class User < ApplicationRecord
has_and_belongs_to_many :roles
end
class Role < ApplicationRecord
has_and_belongs_to_many :users
end
最后,我打开rails控制台并运行以下命令
@user = User.new(:username => "Nifras")
@role = Role.new(:rolename => "admin")
@role.save
@user.roles << @roles
上面的最后一行产生以下错误:
ActiveModel::UnknownAttributeError: unknown attribute 'user_id' for User::HABTM_Roles.
但我的关系表有自己的user_id。我错在哪里以及如何克服这个问题?
提前致谢
答案 0 :(得分:2)
这是不正确的,因为它使用复数。
linesHidden
最好是
rails g migration CreateRolesUsers users:references roles:references
稍微优雅
rails g migration CreateRolesUsers user:references role:references
因此,基本上,执行rails generate migration CreateJoinTableRoleUser role user
,删除rake db:rollback
中的上一次迁移,然后使用上面的第二行或第三行生成正确的迁移。或者,回滚后,您只需编辑迁移即可将“用户”和“角色”更改为“用户”和“角色”。