我在两个模型之间有一个has_and_belongs_to_many
关系。
class DirectoryListing
has_and_belongs_to_many :directory_listing_categories
end
class DirectoryListingCategory
has_and_belongs_to_many :directory_listings
end
这创建了两个表directory_listings
和directory_listing_categories
和中间的第三个表,名为
directory_listing_categories_directory_listings
我可以使用活动记录查询从控制台访问前两个表。 由于此关系不会为中间的第三张表创建第三张模型,因此我无法从Rails控制台访问第三张中间表。
我尝试为此创建模型,但未成功。
这是访问第三张表的正确方法吗?
class DirectoryListingCategoryDirectoryListing < ActiveRecord::Base
end
答案 0 :(得分:0)
首先,要在控制台中访问表,必须在应用程序中创建一个与表名称相同的模型。
第二,如果要创建中间表的记录,则应通过在控制台中执行原始查询来创建它,
ActiveRecord::Base.connection.execute('your insert into query goes here')
答案 1 :(得分:0)
我最近创建了一个小应用程序,在其中我必须存储一些角色并将其映射到用户。设置为:
User
模型对应于users
表。 Role
模型对应于roles
表。 我为创建关联表而编写的迁移是这样的:
class CreateUserRoleJoinTable < ActiveRecord::Migration[5.2]
def up
create_join_table :users, :roles
end
def down
drop_join_table :users, :roles
end
end
运行迁移时,Rails创建了一个roles_users
。如果需要,还可以在up
方法中添加foreign_keys和唯一索引。
模型就像:
class User < ApplicationRecord
has_and_belongs_to_many :roles
end
class Role < ApplicationRecord
has_and_belongs_to_many :users
end
所以它几乎是同一种设置。
此设置为我提供了有关User对象的以下方法(由下面的user
对象表示:
user.role_ids
:这将获取该用户所关联角色的角色ID。 user.role_ids=
:这将允许我同时使用分配和数组插入与用户设置角色。像这样:
user.role_ids = 1 # Assuming there are no roles already associated with the user
user.role_ids = [2,6] # This will remove the previously assigned role (with ID = 1) and assign the roles with IDs 2 & 6 to the user
user.role_ids << 5 # This will add the role ID 5 to the user (final role_ids at this point will be [2,5,6]
user.roles
:这类似于user.role_ids
,但会获取我的Role对象而不是ID。 user.roles=
:再次类似于user.role_ids=
,但将使用对象而不是ID。对于角色模型,我得到role.user_ids
,role.user_ids=
,role.users
,role.users=
。
重点是-我很少需要触摸roles_users
表。
如果这样做,我可以执行 User.connection.execute(sql)
并手动读取结果。否则,自动注入的方法就足够了。
我希望这会有所帮助。