我在Rails上使用scaffold命令生成了两个表及其模型和控制器
这两个表是用户和角色
scaffold命令创建两个表模型和控制器。
class User < ApplicationRecord
has_and_belongs_to_many :roles
end
class Role < ApplicationRecord
has_and_belongs_to_many :users
end
然后我使用以下命令生成多对多关系第三个表。
rails generate migration CreateJoinTableUserRole User Role
对于第三个表,rails不生成模型或控制器。如何将值添加到此表?我是需要单独为此表创建模型还是以其他方式创建模型?
答案 0 :(得分:1)
要生成迁移:
rails g migration create_join_table :roles, :users
然后,你可以简单地保存关联:
@user.roles << @role
其中@user
为User
个对象且@role
为Role
个对象。
注意:此处应始终牢记的事项是,联接表名称按字母顺序排列,在这种情况下, 角色 应该在 <之前em>用户 ,因此:roles_users
将是根据Rails惯例创建的HABTM工作表。
答案 1 :(得分:-1)
对于第三张表,您不需要任何控制器或模型。它存储user
和role
的记录。
当您在role
或其他任何地方为用户创建UserController
时:
@user.roles << @role
鉴于你有两个对象@user和@role分别为User和Role类。
它会在该表格中创建一个新行,其中包含@user
的ID和Roles
的ID,对于相反的情况也是如此,即当您创建{{1对于一个角色。
user
或
@role.users << User.find(1)
HABTM关联的Rails指南。