问题标签 [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 投票
1 回答
119 浏览

ruby-on-rails - has_many 关系在业务感知上似乎不正确或不合逻辑,需要像 belongs_to_many 这样的东西吗?

我的情况是这样的。公司有很多用户,用户可能属于很多公司。当前的实现如下所示。

它有效,但“用户拥有许多公司”在逻辑上看起来没有意义。它一定是类似belongs_to_many 公司的东西。我需要使用 has_and_belongs_to_many 吗?

有人可以建议代表这些关系的正确方法吗?

0 投票
2 回答
398 浏览

ruby-on-rails - 如何使用 has_many :through 和 in_place_edit?

我有两个模型:Campaign 和 Contact。

一个活动有_许多联系人。

一个联系人 has_many 活动。

目前,每个联系人都有一个contact.date_entered 属性。一个活动使用该日期作为开始倒计时到属于该活动的不同事件。

但是,在某些情况下,特定联系人的活动可能需要延迟 X 天。在本例中,campaigncontact.delaydays = 10。

在某些情况下,必须完全停止特定联系人的活动,所以现在我设置campaigncontact.delaydays = 1。(这有什么大问题吗?)

默认情况下,我假设不存在活动联系人(但不确定它是如何工作的?)

所以这就是我试图做的事情:

那么,问题来了:上面的说法正确吗?如果是这样,我如何允许用户编辑特定联系人的活动延迟。

现在,我想从联系人视图中执行此操作。

这是我尝试过的:

在联系人控制器 (?)

在视图中

我怎样才能正确?

0 投票
1 回答
648 浏览

ruby-on-rails - 在 has_many 的连接模型上使用 named_scopes :through

我一直在用头撞墙,表面上应该很简单。假设我有以下简化模型:

用户.rb

会员资格.rb

组.rb

很简单,对吧?所以我想要做的是使用连接模型上现有的命名范围来获取用户活动的所有组的集合。类似于 User.find(1).groups.active 的东西。显然这是行不通的。

但就目前而言,我需要做一些类似User.find(1).membrships.active.all(:include => :group)返回成员资格和组的集合的事情。我不想要那个。

我知道我可以在 User 模型上添加另一个 has_many ,其条件与 Membership 模型上的 :active named_scope 重复,但这很糟糕。

所以我的问题是:有没有办法在模型之间直接遍历时使用中间命名范围?非常感谢。

0 投票
4 回答
4993 浏览

ruby-on-rails - 如何使用 Accepts_nested_attributes_for?

为简洁起见编辑我的问题并更新我所做的事情:

如何为公司建模具有多个地址并将单个地址分配给联系人,并能够在创建或编辑联系人时分配它们?

我想使用嵌套属性在创建新联系人时添加地址。该地址作为其自己的模型存在,因为我可能希望选择从现有地址下拉而不是从头开始输入。

我似乎无法让它工作。我得到了一个未定义的方法“build”,用于 nil:NilClass 错误

这是我的联系人模型:

这是我的地址模型:

我想在创建新联系人时访问属于公司的其他联系人的所有地址。所以这是我代表公司的方式:

以下是我尝试在 View for _form for Contact 中创建字段的方式,以便在有人创建新联系人时,他们将地址传递给地址模型并将该地址与联系人相关联:

当我尝试编辑时,街道 1 的字段为空白。而且我不知道如何显示来自 show.html.erb 的值。

底部是我的错误控制台——似乎无法在地址表中创建值:

我的联系人控制器如下:

这是我的错误控制台的片段: 我正在发布属性,但它不是在地址表中创建...。

处理 ContactsController#create (for 127.0.0.1 at 2010-05-12 21:16:17)

[POST] 参数:{"commit"=>"Submit", "authenticity_token"=>"d8/gx0zy0Vgg6ghfcbAYL0YtGjYIUC2b1aG+dDKjuSs=", "contact"=>{"company_name"=>"Allyforce", "title"=>" ", "campaign_id"=>"2", "address_attributes"=>{"street1"=>"abc"}, "fax"=>"", "phone"=>"", "last_name"=>"" , "date_entered"=>"2010-05-12", "email"=>"", "first_name"=>"abc"}}

公司负载 (0.0ms)[0m [0mSELECT * FROM "companies" WHERE ("companies"."name" = 'Allyforce') LIMIT 1[0m

地址创建 (16.0ms)[0m
[0;1mINSERT INTO "addresses" ("city", "zip", "created_at", "street1", "updated_at", "street2", "state") VALUES(NULL, NULL , '2010-05-13 04:16:18', NULL, '2010-05-13 04:16:18', NULL, NULL)[0m

联系人创建 (0.0ms)[0m
[0mINSERT INTO "contacts" ("company", "created_at", "title", "updated_at", "campaign_id", "address_id", "last_name", "phone", "fax" , "company_id", "date_entered", "first_name", "email") VALUES(NULL, '2010-05-13 04:16:18', '', '2010-05-13 04:16:18', 2, 2, '', '', '', 5, '2010-05-12', 'abc', '')[0m

0 投票
3 回答
1095 浏览

ruby-on-rails - Ruby on Rails:遇到挫折的 has_many

我对 has_many through 有一个令人沮丧的问题:即在保存之前不会创建直通模型这一事实。不幸的是,我需要在保存父模型之前在这些模型上设置数据。

这是松散的设置:

一切都很好,除了我需要在保存之前访问“wtf”:

f = Foo.new => #

f.bars => [酒吧列表]

此处为空列表

f.wtfs => []

f.保存!=> 真

现在我得到东西

f.wtfs => [东西列表]

我什至明确地创建了 wtfs 这样做:

这会导致填充 f.wtfs,但不会填充条。当我保存和检索时,我得到了预期的 wtfs 的两倍。

有人有想法么?

0 投票
1 回答
977 浏览

ruby-on-rails - 一种方式有很多通过

我有一个类别、一个子类别和一个产品模型。

我有:

有没有办法有类似的东西

?

“正常”导轨方式不起作用,因为“子类别”不属于产品,因此产品没有 subcategory_id 字段。相反,我需要查询类似于

有没有办法做到这一点?

谢谢,

尼古拉斯·霍克·伊萨萨

0 投票
5 回答
678 浏览

ruby-on-rails - 创建 has_many :through records 2x 次

我有模型

因此,当我尝试将问题绑定到对其创建的测试时:

在 testing_questions 中创建了 6 个 SQL 查询和 6 条记录。为什么?

0 投票
1 回答
128 浏览

ruby-on-rails - Rails - 从 :has_many :through 中查找信息的逻辑需要!

我有 3 个相关的表格。用户、订单和可视项

这个想法是每个用户都有许多订单,但同时,每个用户都可以查看属于其他用户的特定其他订单。所以 Viewables 具有 和 的user_id属性order_id

订单有一个 :has_many :Users, :through => :viewables

是否可以通过订单的视图进行查找?所以像

@viewable_orders = Orders.find(:all, :conditions => ["Viewable.user_id=?",1])

获取 user_id=1 可以查看的订单列表。(这不起作用,否则我不会问。:()我可以做一些类似侧边栏的事情,当前用户(登录的用户)可以查看他的其他人的订单列表可以查看。例如

其他三个拥有一些他可以查看的订单的用户最终应该像这样显示:

  1. 杰克 (2)
    • 基本订单(registry_id:1)
    • 新订单(registry_id:29)
  2. 艾米 (4)
    • 短订单(registry_id:12)
  3. 吉尔 (5)
    • 硬件订单 (14)
    • 粉红秩序 (17)
    • 软件订单 (76)

(括号中的数字是各自的 user_id 或 registry_id)

因此,要查找当前用户可以找到的所有订单列表(假设当前用户的 user_id 为 1),可以通过以下方式找到

这将给我上述 6 个注册表的集合。现在,最简单的方法就是让我列出

但是对于长列表来说,这变得很难看。

谢谢!

0 投票
3 回答
2110 浏览

ruby-on-rails - Rails 防止多态 has_many 中的重复:通过关联

是否有一种简单或至少优雅的方法可以通过关联防止多态 has_many 中的重复条目?

我有两个可以标记的模型、故事和链接。我有意识地决定不在这里使用插件。我想真正了解正在发生的一切,而不是依赖于我没有完全掌握的其他人的代码。

要查看我的问题是什么,如果我在控制台中运行以下命令(假设故事和标签对象已经存在于数据库中)

我的 taggings 连接表将添加两个条目,每个条目都有相同的确切数据(tag_id = 1,taggable_id = 1,taggable_type = "Story")。这对我来说似乎不太合适。因此,为了防止这种情况发生,我在我的标记模型中添加了以下内容:

它几乎可以按预期工作,但是如果我尝试将重复标签添加到故事或链接中,则会收到 ActiveRecord::RecordInvalid: Validation failed 异常。似乎当您将关联添加到列表时,它会调用保存!(而不是保存 sans !)方法,如果出现问题而不是仅仅返回 false,则会引发异常。这不是我想要发生的。我想我可以用 try/catch 来围绕任何添加新标签的尝试,但这违背了你不应该期待你的例外的想法,这是我完全期望发生的事情。

当我想要做的只是因为存在重复而默默地不将对象保存到数据库时,是否有更好的方法不会引发异常?

0 投票
1 回答
1145 浏览

ruby-on-rails - Rails:双向 has_many :通过关系

我在 Rails 应用程序中有三个模型:Game代表正在玩的游戏的一个实例。Player代表游戏参与者的一个实例。User代表可以参与游戏的注册人。

每个Game可以有很多Players,每个User可以有很多Players(一个人可以同时参与多个游戏);但每一个Player都恰好在一个之中Game,并且代表着一个User。因此,我目前的关系如下。

...自然players表有game_iduser_id列,但games没有users外键。

我还想代表每个Game人都有很多Users演奏的事实;每个User人都有很多Games他们正在玩的东西。我该怎么做呢?补充就够了吗