问题标签 [has-and-belongs-to-many]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
317 浏览

ruby-on-rails - 复杂形式 - 以单一形式管理多个模型 - (3 度疯狂)

我在下面的第二个代码块中隔离了问题(如果您不想要所有详细信息):我可以从帐户模型创建新用户。我无法从帐户模型中分配这些用户角色。我正在使用 fields_for,当我尝试将 role_ids 分配给角色模型时,此方法不起作用。我的数据库是按以下方式设置的:

  1. 账户模型 has_many : users

  2. 用户模型 has_and_belongs_to_many :角色,belongs_to :帐户

  3. 角色模型 has_and_belongs_to_many :用户

意见/帐户/new.html.erb

account.rb 模型中的关联 setter 方法:使用堆栈跟踪,我已将问题隔离到第 34 行的“未定义方法 `roles' for #”,标记如下:

最后,在帐户控制器中,我在内存中构建用户和角色:

来自 consol 的 @accounts.users.first.roles.build 证明:

0 投票
1 回答
136 浏览

ruby-on-rails - Is it possible to interact with a join table, with a form's create action?

*Note to view all code, follow the link

I am creating new "accounts". Each new Account have_many :users. Users have_and_belong_to_many roles. I am trying to assign EXISTING roles to new users, in the new account form. Typically an easy process however...

The have_and_belong_to_many association between Users and Roles implies that users and roles are associated by a join table. I don't have a model to work with. So I am not sure how to go about coding this. I'm able to create new Roles, using methods outlined here (in the answer) but I am clueless as to assign existing Roles to new users through the account model.

The SQl equivalent would be something like this: SQL (0.1ms) INSERT INTO "roles_users" ("role_id", "user_id") VALUES (6, 29)Where I need 29 to function like the ID of the new user created in rails i.e. VAULES (6, ID)

Current Code: (creates a new role)

Account.rb

User.rb

accounts_controller.rb

0 投票
2 回答
4180 浏览

ruby-on-rails - 使用 HABTM 关系更新复选框的值——Rails

大家好,我一直在使用 has_and_belongs_to_many 与Railscast Episode #17中的复选框示例的关系。我遇到了一些问题,现在一切都很顺利,除了更新按钮不起作用。

编辑视图看起来像这样

在控制器中我有....

该按钮不是进行重定向的事件......所以我不知道发生了什么。我的表单创建中有什么东西搞砸了吗?我不确定如何创建一个按钮并让它通过模型更新等访问控制器中的方法。

我环顾四周寻求帮助,并认为可能是因为 attr_accessible 所以我添加了 =>

到我的用户模型,但仍然没有......我知道为什么我的表单没有提交吗?

0 投票
3 回答
964 浏览

cakephp - 当应该插入 HasAndBelongsToMany 模型时,CakePHP 正在更新

我有一个小问题。我正在制作一个有标签和问题的网站。我有一个 Question 模型、Tag 模型、QuestionsTag 模型,一切都很好地结合在一起。用户在询问某事时将标签放在由空格(foo bar baz)分隔的字段中,就像在 stackoverflow.com 上一样。

现在,这里是检查标签是否已经存在并将标签输入数据库和所需关联的代码:

问题是这样的,一个问题的 id 为 1,我希望它有 id 为 1、2、3 的标签。

当第二次和第三次保存被调用时,Cake 看到 questions_tags 表中已经有一个 id 为 1 的问题,所以它只是更新了标签。

但这是不正确的,因为该表中应该有许多具有相同 id 的问题,因为它们引用了属于它们的不同标签。

那么,有没有办法防止这种情况发生呢?防止保存方法更新?

谢谢!

0 投票
4 回答
3264 浏览

ruby-on-rails - 具有 has_and_belongs_to_many 关系的acts_as_list

我找到了一个名为acts_as_habtm_list 的旧插件——但它适用于Rails 1.0.0。

现在这个功能是内置在acts_as_list 中的吗?我似乎找不到任何关于它的信息。

基本上,我有一个 Artists_events 表 - 没有模型。这种关系是通过指定 :has_and_belongs_to_many 的这两个模型来处理的

在这种情况下如何指定顺序?

0 投票
3 回答
1261 浏览

cakephp - CakePHP HABTM:编辑一项会导致重新创建 HABTM 行,破坏额外数据

我在 CakePHP 中的 HABTM 关系有问题。

我有两个这样的模型:DepartmentHABTM Location。一家大公司有许多建筑物,每栋建筑物提供的服务数量有限。每个建筑物也有自己的网页,因此除了 HABTM 关系本身之外,每个 HABTM 行还有一个url字段,用户可以访问该字段以查找有关他们感兴趣的服务以及它如何在他们所在的建筑物中运行的其他信息有兴趣。

我已经像这样设置模型:

控制器完全无趣。

问题: 如果我编辑 a 的名称,则链接到该名称的Location所有DepartmentsLocations 都将Location使用空 URL 重新创建。由于模型指定 unique 为真,这也会导致所有较新的行覆盖较旧的行,这实质上会破坏所有 URL。

我想知道两件事:我可以停止吗?如果是这样,怎么做?

而且,在一个不太技术和更多抱怨的情况下:为什么会发生这种情况?对我来说,通过 Cake 编辑字段会引起这么多麻烦,这对我来说似乎很奇怪,因为我可以轻松地通过 phpMyAdmin,在Location那里编辑名称,并得到我期望的结果。当我只是在一行中编辑一个字段时,为什么 CakePHP 会触摸 HABTM 数据?它甚至不是外键!

0 投票
2 回答
743 浏览

cakephp - CakePHP - HABTM - 将多个标签添加到多个点

我正在尝试使用多个标签来“标记”多个“点”。我成功地标记了我的单点。不幸的是,当我尝试在另一个点上使用标签(例如“test2”作为标签)时,如果我将“唯一”设置为 false 或“唯一”设置为 true,则会出现重复输入错误,它将删除“test2”的所有其他点的我的标签并创建一个新的。

这是我的帖子数据:

在我的标签模型中,我有这个:

我也尝试过将 'unique' 设置为 true。不幸的是,这将删除连接表 ('points_tags') 中的任何其他“Test2”实例。

我已经尝试过使用 save() 和 saveAll()。两者都给我这个错误:

警告 (512): SQL 错误: 1062: 重复条目 '4b7af6d7-787c-4f10-aa49-2502c0a80001-4b47c66f-a130-4d12-8ccd-608' 键 'MAN_ADD' [CORE/cake/libs/model/datasources/dbo_source .php,第 527 行] 查询:INSERT INTO points_tags( tag_id, point_id, id) VALUES ('4b7af6d7-787c-4f10-aa49-2502c0a80001','4b47c66f-a130-4d12-8ccd-60824051e4b0','4b7b39f3-43973-4744-0c ')

想法???

建议???

0 投票
1 回答
692 浏览

cakephp - CakePHP 和 HABTM 标签过滤

我在与 CakePHP HABTM 的关系上有点挣扎,我在尝试做一个看似简单的任务时遇到了困难。我有许多营地和许多新闻项目。每个 NewsItem 都可能与任何阵营相关,因此当用户创建 NewsItem 时,他们会检查该项目用于哪些阵营。这就是想法。

所以...

我想在我的 NewsItems 视图中加入一些营地过滤。换句话说,我想查看与营地“A”和营地“B”相关的所有新闻项目。

向“查找”和“分页”功能添加条件就像一个魅力。

然而...

如果一个 NewsItem 属于多个 Camp,它会在列表中出现多次。因此,当我告诉 find 给我属于“A”阵营和“B”阵营的所有 NewsItems 时,属于“A”阵营和“B”阵营的 NewsItem 将出现两次。

调试查询如下所示:

选择NewsItemid, NewsItem. user_id, NewsItem. heading, NewsItem. body, NewsItem. modified, User. first_nameFROM news_itemsAS NewsItemLEFT JOIN usersAS UserON ( NewsItem. user_id= User. id) LEFT JOIN camps_news_itemsAS CampsNewsItemON ( CampsNewsItem. news_item_id= NewsItem. id) WHERE CampsNewsItemcamp_id在 (1, 5) 中排序NewsItemmodified描述限制 10

选择Campid, Camp. name, Camp. created, Camp. modified, CampsNewsItem. camp_id, CampsNewsItem. news_item_idcampsAS CampJOIN camps_news_itemsAS CampsNewsItemON ( CampsNewsItem. news_item_idIN (6, 6, 7, 8) AND CampsNewsItem. camp_id= Camp. id) WHERE 1 = 1

php 代码如下所示:

感谢您的任何见解!

0 投票
2 回答
1551 浏览

ruby-on-rails - rails HABTM 连接和不便

我在模型之间有一个有效的 HABTM 关联

帖子和用户... posts_users 表如广告所示,并且在其 model.rb 中都有必要的 has_and_belongs_to_many

如果我使用User.find(1).posts它,它将找到所有具有有效用户名的帖子

我的问题是如何处理这种情况。

我想用

user.posts.find(1234)或者真的来自控制器的eq:

为了保护自己免受其他用户的跳跃。然而,这种用法有一些奇怪的结果。它确实有效,但不是 id 是特定帖子或所有帖子的有效 id,而是返回 1 的 id 而不是 1234 的真实 ID。所以进一步的连接,例如:

不工作或无效。

我尝试在all一些地方进行适当的尝试,因为过去有时这对其他尴尬的情况有效。仍然有一些陌生人的相遇。

user.posts.all.first工作并返回正确的 ID!,但使用 first 并没有真正的帮助。 user.posts.all.find(6933)返回#<Enumerable::Enumerator:0x105343630>

还尝试了各种组合,(:post_id => 1234)返回始终为 1 的 id。

有任何想法吗?

0 投票
1 回答
266 浏览

cakephp - CakePHP HABTM 关系列表

在尝试制作 HABTM 关系列表(用于管理部分)时,我遇到了很大的问题。这是交易:

权限:ID、姓名;用户:id,用户名;权限用户:权限ID,用户ID

Permission HasAndBelongsToMany User

我想列出这样的清单:

User.id | User.username | Permission.id | Permission.name
1 | Jack | 1 | posts
1 | Jack | 2 | comments
2 | Mark | 1 | posts
3 | Kate | 3 | tags

像: $this->Permission->User->find('all');(或其他方式)这样的东西并没有真正起作用,因为它会为 获取许多权限Jack,反过来它也会为该posts权限获取许多用户,因此无法在视图中列出。

我想要的是得到一个像这样的数组:

[0] = > array(
[User] => array([id] => 1 [username] => Jack)
[Permission] => array([id] => 1 [name] => posts)
)
[1] = > array(
[User] => array([id] => 1 [username] => Jack)
[Permission] => array([id] => 2 [name] => comments)
) ...

有任何想法吗?