问题标签 [has-one-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 回答
393 浏览

ruby-on-rails - has_one :through 关联错误地为 new_record 返回 nil

我有以下型号。是的,设计有点复杂,因为我们正在分阶段改造我们的架构;尽管如此,我认为这里的原则应该有效:

我正在尝试在需要访问 translation_service_option 的 TranslationService 上构建 before_save 回调,但是,这将返回 nil 以获取新记录:

当然,一旦我保存了对象,它就可以正常工作,但问题是我需要在 before_save(或 before_create)回调中访问它:

所以问题是它t.service返回 nil translation_service_option,即使t.service.translation有一个有效的translation_service_option.

我知道它还没有t.serviceid,它确实知道它的translation对象。那么为什么它不能也知道它的translation_service_option对象呢?显然我可以self.translation.try(:translation_service_option)在我的回调中使用,但是随着回调使用更普遍使用的方法,这开始变得混乱,所以只是为了这个怪癖,我发现自己需要替换所有使用translation_service_optionwith translation.try(:translation_service_option),这似乎太不合适了Railsy 一开始就否定了成立has_one :through协会的目的。

有没有办法可以设置我的关联以t.service.translation_service_option在初始化时正确分配?

0 投票
1 回答
192 浏览

ruby-on-rails-4 - rails 4 "chained" has_one: :through 关系适用于持久但不是新的对象

我有一个相当复杂的模型设置:

请注意,以上两个类都没有命名空间,而下面的关联模型都存在于Billing命名空间中。

我的问题出在VendorLineItem课堂上,我需要在其中找到相关的resource.

如果我正在处理持久数据,一切都很好。在 Rails 控制台中:

如果,OTOH,我正在使用一个新实例,则resource返回为零(rails 甚至没有尝试;没有发出 sql)。

但是我可以通过显式的关联链访问资源:

我也可以has_one :contract_resource, through: :unit_rate毫无问题地通过关联找到资源:

为什么has_one: resource, through: :contract_resource协会在这里不起作用?

0 投票
1 回答
1614 浏览

ruby-on-rails - ActiveRecord 自定义 has_one 关系

我正在使用 Rails 5.0.0.1 ATM,在优化我的数据库请求计数时遇到了 ActiveRecord 关系的问题。现在我有:模型 A(比如说“订单”)、模型 B(“订单调度”)、模型 C(“人员”)和 D 模型(“人员版本”)。

表 'people' 仅包含 'id' 和 'hidden' 标志,其余人员数据位于 'person_versions' ('name'、'surname' 和一些可能随时间变化的东西,如科学标题)。

对于在 DB 中记录订单的人,每个订单都有“receiving_person_id”,每个 OrderDispatch 都有交付订单的人的“dispatching_person_id”。Order 和 OrderDispatch 也有创建时间。

一个订单有许多分派。

因此,直截了当的关系是:

但是当我根据调度列出我的订单时,我必须处理 N+1 的情况,因为要为每个接收人员 ID 和调度人员 ID 找到准确的(根据订单/订单调度的创建日期)PersonVersion,我正在发出另一个请求。

第一的 '?' 是 Order/OrderDispatch 创建日期和第二个“?” 正在接收/订购人员 ID。

使用此查询,我可以获得创建 Order/OrderDispatch 时的准确人员数据。

在原始 SQL 中使用子查询(或子查询,因为 Order 在一个列表中带有 OrderDispatches)编写查询相当容易,但我不知道如何使用 ActiveRecord 来做到这一点。

我试图编写自定义的 has_one 关系,因为这是我来过的:

如果我仅将其用于接收或调度人员,则它可以工作。当我尝试为加入的订单和 order_dispatches 表进行 eager_load 时,必须为“person_versions”之一加上别名,而在我的自定义 where 子句中它不是(无法预测它是否会被别名,它被用于两种方式) .

不同的方法是这样的:

原始的“person_versions”在哪里是可以的,因为它在子查询中并且使用符号“:id”使原始 SQL 为连接到订单和 order_dispatches 的 person_versions 表获得正确的别名,但是对于 person_versions.id,我得到的是“IN”而不是“eqauls” xx 子查询和 MySQL 不能在与 IN/ANY/ALL 语句一起使用的子查询中执行 LIMIT,所以我只得到随机的 person_version。

所以 TL;DR 我需要使用自定义“where”子句将“has_many through”转换为“has_one”,该子句在日期低于原始记录创建的那些中查找最新记录。

编辑:另一个 TL;简化的 DR

我需要将此方法转换为“has_one”关系,以便我可以“eager_load”这个。

0 投票
1 回答
77 浏览

ruby-on-rails - 包含 has_many 和 has_one 关系的 Rails 模型,将两个具有 has_many 到 has_many 关系的模型关联起来

这是这个问题的轻微扩展:Rails model that has both 'has_one' and 'has_many' but with some constraints

在这里,我试图将两个模型关联起来,每个模型都有另一个 -> 我有一个中间模型,它存储外键,允许“通过”关系。具体来说,我正在尝试将比赛和球队联系起来,我希望每个球队都“has_one :current_matchup”

以下是我的模型的相关摘录:

团队:

配对:

比赛队伍:

我怎样才能做到这一点?这是我当前的尝试,这会导致错误:

模特队:

0 投票
2 回答
44 浏览

ruby-on-rails - 导轨。将列表保存在数据库中是个好主意吗?我应该使用什么关系?

我为一件小事而苦苦挣扎,我不知道该怎么做。我有用户和状态表。我想我应该添加 StatusList 表,它将保留所有可用的状态。用户将保留用户数据,但状态将保留当前用户状态。所以它可能看起来像:

我在考虑这样的关联:

但这并不像我预期的那样工作。我的意思是当我尝试这样做时:

但是当我检查 ActiveRecord::Base.connection.tables 我看到 ['users', 'statuses', 'status_lists']。所以我开始在谷歌寻找解决这个问题,但我找不到任何东西,所以我在这里问,这种关系应该是什么样子?如果我的想法很好,为什么不能像我预期的那样工作?

感谢您提供任何帮助我找到解决方案的提示。

0 投票
1 回答
300 浏览

ruby-on-rails - Rails has_one :通过不同的模型名称

Atransaction_record有很多workflows,每个workflow都有很多milestones。其中一个milestones已标记current: true,我想从transaction_recordcurrent_milestone

我可以创建一个返回所需的方法milestone,但我想让它成为一个实际的关联,以便我可以将它包含在数据库性能中。

我有一个transaction_records#index页面,我在其中列出了每个的transaction_records和。除非我能弄清楚这一点current_milestonen+1

我真的希望能够做类似的事情:

更新

transaction_record我可以指定和之间的方向关系milestone,然后做transaction_record has_one :current_milestone, -> { where(current: true) }, class_name: Milestone。但现在我正在更改我的数据库模式以获得更有效的负载查询。不是世界末日,但如果我已经有一个协会,这不是我的偏好。

0 投票
1 回答
55 浏览

ruby-on-rails - Rails 4 API:创建嵌套资源

我有 3 个模型:

但我只有一个Repositionings控制器。在我的应用程序中,用户可以添加 amood并将repositioning数据发送到我的 API,如下所示:

是否有一种生成必要repo_mood条目的方法:

无需手动调用它?我在想像 Rails 视图中的嵌套表单。

0 投票
1 回答
246 浏览

ruby-on-rails - has_one 虽然 has_one 的构建方法

导轨 5.1.2 红宝石 2.5.3

我知道有多种方法可以暗示这种关系,但是,这个问题更多的是关于为什么以下不起作用而不是解决现实世界的问题。

has_many设置

在上述Subscriber模型中,设置为使用has_many以下关系将起作用:

在那之后,我希望在人际关系Subscriber上表现得一样has_one

has_one设置

但是,尝试promotion使用等效的构建方法构建嵌套关联会has_one导致NoMethodError (undefined method 'build_promotion' for #<Subscriber:0x00007f9042cbd7c8>)错误

但是,这确实有效:

我认为人们应该期望以与构建has_one相同的方式构建嵌套关系是合乎逻辑的has_many

这是一个错误还是设计使然?

0 投票
2 回答
63 浏览

php - 无法在单程中建立关系

我正试图建立一种一次性的关系。

表:

在 Package.php 中

0 投票
2 回答
697 浏览

php - Laravel hasOneThrough(); 中间表自定义列值

如果之前已经回答过这个问题,我深表歉意,但是我似乎没有发现类似的情况。如果它是重复的,请指出我正确的方向。

我有三个自定义表:

app_expressions连接到app_replies通过app_links


假设我在每个表中都有一条记录。

  • app_expressions.idapp_links.sidwhere一样app_links.source = 'expression'
  • app_replies.idapp_links.didwhere一样app_links.destination = 'reply'

使用 Laravel 的hasOneThrough()我如何通过条件访问app_expressions's 回复?伪代码如下:app_repliesapp_linksapp_links.destination = 'reply'

我希望我解释得很好。