在Rails上插入值has_and_belongs_to_many关联表

时间:2016-10-19 08:09:54

标签: mysql ruby-on-rails ruby

我在Rails上使用scaffold命令生成了两个表及其模型和控制器

这两个表是用户和角色

scaffold命令创建两个表模型和控制器。

应用程序/模型/ user.rb

class User < ApplicationRecord
  has_and_belongs_to_many   :roles
end

应用程序/模型/ role.rb

class Role < ApplicationRecord
    has_and_belongs_to_many :users
end

然后我使用以下命令生成多对多关系第三个表。

rails generate migration CreateJoinTableUserRole User Role

对于第三个表,rails不生成模型或控制器。如何将值添加到此表?我是需要单独为此表创建模型还是以其他方式创建模型?

2 个答案:

答案 0 :(得分:1)

要生成迁移:

rails g migration create_join_table :roles, :users

然后,你可以简单地保存关联:

@user.roles << @role

其中@userUser个对象且@roleRole个对象。

注意:此处应始终牢记的事项是,联接表名称按字母顺序排列,在这种情况下, 角色 应该在 <之前em>用户 ,因此:roles_users将是根据Rails惯例创建的HABTM工作表。

答案 1 :(得分:-1)

对于第三张表,您不需要任何控制器或模型。它存储userrole的记录。 当您在role或其他任何地方为用户创建UserController时:

@user.roles << @role

鉴于你有两个对象@user和@role分别为User和Role类。

它会在该表格中创建一个新行,其中包含@user的ID和Roles的ID,对于相反的情况也是如此,即当您创建{{1对于一个角色。

user

@role.users << User.find(1)

HABTM关联的Rails指南。