问题标签 [has-many-through]

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 投票
0 回答
1566 浏览

ruby-on-rails - Ruby on Rails - has_many :through with nested_attributes_for

我遇到了一个通过谷歌、论坛、群组等在网上找不到太多的问题,所以我要举手向比我更聪明的人寻求帮助:)

我有一个使用nested_attributes_for 的rails 项目设置,两个模型之间存在一对一的关系。在我最近不得不将项目修改为 has_many :through 关系之前,它工作起来非常容易并且符合预期。

代码看起来像这样:

P型号:

F型:

F_P 型号:

只要代码保持如上,一切正常(当然除了通过 Web GUI 进行的 CRUD 操作)。但是,一旦我将嵌套属性部分添加到 P 模型中,如下所示:

它会导致我的测试失败并且 GUI 可以正常工作(减去未强制执行的验证)。

关于让这个验证与 nested_attributes_for 一起愉快地工作的正确方法的任何想法,还是我只需要在 P 控制器中创建自己的 CRUD 操作来处理它,就像一年左右一样?

0 投票
2 回答
314 浏览

ruby-on-rails - 从连接表模型更新关联记录

我有一个 has_many :through 关系,通过管理层将球员与球队联系起来。

我想在团队表上有一个计数器(有点像计数器缓存),它告诉我自本周开始以来有多少新关联。当然,计数器缓存不会起作用,因为它总是会给出所有曾经创建的关联。

我尝试从管理模型中更新相关团队。这永远不会成功。即使关联团队的增量似乎已保存好,但在创建关联后,我的计数器仍为 0。

我也尝试过使用观察者。观察员按我的预期被调用,我能够检索团队,但是对它的任何更新都没有保存。

我确定我遗漏了一些明显的东西!实现这一点的rails方法是什么?

我设置了一个 github 来说明问题,运行 rake spec 会失败。

http://github.com/steveybaby/assoc_problem

0 投票
2 回答
9734 浏览

ruby-on-rails - 在 has_many :through 关系中指定外键

我有以下三个模型:用户、项目和分配。

用户has_many通过作业进行项目。但是,Assignment 实际上有两个与用户相关的外键:(user_id代表被分配项目的用户)和completer_id(代表完成项目的用户)。

通常,user_id并且completer_id将是相同的(如果分配项目的用户完成它)。但是,如果另一个用户完成它,则 user_id 和 completer_id 将不同。

在我的用户模型中,我有以下内容:

我想创建另一个关联,称为:completed_projects,它completer_id用作模型中 User 的外键:through,而不是:user_id. 是否有可能做到这一点?

而且,顺便说一句,我知道这个:foreign_key选项。但是,使用 时会忽略此选项:through,因此我想知道是否有办法在没有它的情况下执行此操作。

最后,我应该提到我对其他设计持开放态度,如果不能以这种方式完成并且有人可以想到更好的方法。

0 投票
2 回答
1284 浏览

ruby-on-rails - Rails:has_many 有额外的细节吗?

虽然我不是一个完整的 Ruby/Rails 新手,但我仍然很年轻,我正在尝试弄清楚如何构建一些模型关系。我能想到的最简单的例子是烹饪“食谱”的想法。

食谱由一种或多种成分以及每种成分的相关数量组成。假设我们在所有成分的数据库中有一个主列表。这表明了两个简单的模型:

如果我们只是想将食谱与成分相关联,那就像添加适当的belongs_toand一样简单has_many

但是,如果我们想将附加信息与这种关系相关联呢?每个Recipe都有一个或多个Ingredients,但我们要标明数量Ingredient

Rails 的建模方法是什么?它是类似于 a 的东西has_many through吗?

0 投票
2 回答
4321 浏览

ruby-on-rails - Rails 类名称/类型不适用于多态 has_many :通过

我有一个管理借方和贷方的发票系统。基本上,发票金额是通过其借方的总和获得的,余额是通过将其贷方的总和减去总金额得出的。

我用四个模型做这个。

  1. 发票
  2. 订单项
  3. 借方
  4. 信用

它的工作方式是通过具有称为可记录的多态关联的连接模型(行项)。乍一看,一切似乎都正常工作。但是,检查行项目显示虽然 recordable_id 显示正常,但 recordable_type 为 nil。

下面是代码的分解:

谁能在这里指出我正确的方向?

0 投票
1 回答
659 浏览

sql - 如何在 Rails 中使用命名范围进行排他而不是包含查询?

我创建了一个应用程序,它根据传递给它的多个服务来查找服务提供者。这是通过 has many_through 完成的,所以有一个连接对象。基本上,如果用户要求提供服务 A 和服务 B 的服务提供商,我的范围将返回提供服务 A 和服务 B 的服务提供商或提供服务 A 或服务 B 的其他服务提供商。而不是这个,我们想仅限于提供两种服务的提供商。

我的范围如下所示:

如您所见,我正在使用 IN 运算符来执行此操作。但是 IN 就像说“给我找任何有服务 A 或服务 B 的提供商”,而我真正想要的是“给我找任何同时有服务 A 和服务 B 的服务提供商”。

是否可以在单个查询中进行这种类型的过滤,或者如果它们不支持所有必需的服务,我是否需要进行复合查询或简单地遍历结果并将它们从列表中删除?

0 投票
1 回答
1293 浏览

ruby-on-rails - rails has_many 关系(4 个模型)以及如何在视图中访问

我有 4 个模型:transac、transac_data、item、dvd_details

现在在“transac”视图中,我需要访问所有这些模型中的内容,例如:

但我还需要从“DvdDetails”模型中访问一些信息,该模型是“最远”的 transac。

我意识到做这样的事情不会真正起作用:

并在“transac”视图的索引中执行此操作

我需要做什么才能做到这一点?

任何帮助表示赞赏!谢谢!

0 投票
1 回答
7833 浏览

ruby-on-rails - ActiveRecord::HasManyThroughAssociationNotFoundError 在 UserController#welcome

我在rails中有一个多对多的关系。所有数据库表都相应地适当命名。所有模型文件都是复数并使用下划线分隔单词。所有命名约定都遵循 ruby​​ 和 rails 标准。我在我的模型中使用了很多,如下所示:

这个错误还有什么可能来自?

ActiveRecord::HasManyThroughAssociationNotFoundError in UsersController#welcome Could not find the association :users_posts in model Post

0 投票
2 回答
1747 浏览

ruby-on-rails - 过滤 has_many 中的连接表:通过 RoR

我有以下模型,在这些模型中,我使用 Rails has_many :through 范式通过 Translation 表加入 Language 和 Products 表:

我想查找特定产品的英语翻译。

我可以列出相关的语言和翻译:

这打印:

(此产品有英文和法文翻译。)

如何获得与语言prod对应的翻译en

如果这没有意义,这里是等效的 SQL:

SELECT t.* FROM products p, translations t, languages l WHERE l.id = t.language_id AND p.id = t.product_id AND l.lang_code = 'en';

0 投票
1 回答
345 浏览

ruby-on-rails - 嵌套有许多通过插件和命名范围

我有一个用户模型(:名称,:密码,:电子邮件),事件模型(:名称,:等)和兴趣模型(:名称)[>所有单数<]

然后我创建了两个连接表 -> UsersInterests 和 EventsInterests;每个不包含主键,仅分别由 user_id/interest_id 和 event_id/interest_id 组成。[>复数<]

我的模型使用 嵌套的有很多通过插件

Whew..ok 所以我想创建一个 named_scope 来查找与特定用户有共同兴趣的所有事件。这是有人帮助我的一些代码。

当我从控制器运行时 =>

我得到错误:

谁能看到我搞砸了什么?