has_and_belongs_to_many关系不能在Rails 5上创建新的应用程序

时间:2017-03-08 10:32:45

标签: ruby-on-rails ruby-on-rails-5

我正在将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。我错在哪里以及如何克服这个问题?

提前致谢

1 个答案:

答案 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中的上一次迁移,然后使用上面的第二行或第三行生成正确的迁移。或者,回滚后,您只需编辑迁移即可将“用户”和“角色”更改为“用户”和“角色”。