问题标签 [has-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 投票
2 回答
2916 浏览

sql - has_many 的索引:通过

假设您有两个模型,用户和城市,由第三个模型 CityPermission 连接:

目前,我使用以下迁移代码片段创建连接表和表的索引:

这些是要创建的最佳索引吗?这些索引是否允许通过连接表来回快速访问,以及在表本身内快速查找,还是有其他更好的方法?以不同的方式重申这一点,这些索引,给定city并且user是类 City 和 User 的实例变量,是否允许city.userscity.city_permissionsuser.citiesuser.city_permissions都表现得同样好?

0 投票
1 回答
1766 浏览

jquery - rails: 如何通过 jQuery 更新 has_many :through 关系?

抱歉,如果这是一个无聊的问题,但我刚刚开始使用 Rails 和 jQuery。我有以下情况:

我有 3 个课程:contactscompanies( contact_company_joinsccj)。对于我创建的所有三个类modelscontrollerviews。显然,联系人和公司是通过连接表 ccj 连接的(使用has_many :through)。

contacts <-> contact_company_joins <-> companies

在我的联系人的“显示”视图中,我想显示一个表格,列出联系人所连接的所有公司(以及公司本身的一些附加信息,例如电话号码)。在我的公司看来,我也想做同样的事情,但这次是员工(联系人)的详细信息。表格的每一行最后都有一个典型的“删除”链接,我现在已经将它的函数连接到我的一个 jQuery 函数:

在两个视图(联系人和公司)中,删除操作将我带到 ccj 控制器的销毁功能。我现在要做的是更新或重新呈现调用删除函数的单个站点(联系人或公司)的表,但只更新表的一部分。我想我必须在上面的“成功”功能中实现它?但是话又说回来,即使我从 ccj 的控制器返回一些东西(呈现的部分?)......对于联系人和公司视图来说,这将是相同的,对吗?如何确保在我的 Ajax 调用销毁 ccj 对象之后,我为我的联系人视图(这将是一个新的公司表)获得一个新的 DOM 对象,但在我从我公司的看法?

希望这一切都有意义:-)

问候,

塞巴斯蒂安

0 投票
2 回答
4171 浏览

ruby-on-rails - 是否可以在rails中有一个复合外键?

假设以下数据模式:

在此示例中,假设我有多个资源,每个资源都可以以多种方式使用。例如,一个资源是widget. Widgets可以foo编辑,他们可以bar编辑。 Gizmos 也可以fooed 和bared。这些使用类型按不同的费率计费,甚至可能针对不同的客户使用不同的费率。每次使用(资源)的出现都记录在使用表中。每个计费费率(针对客户端、资源和类型组合)都存储在计费表中。

(顺便说一句,如果这个数据模式不是解决这个问题的正确方法,请提出建议。)

是否可以使用 Ruby on Rails 和 ActiveRecord 创建has_many从 Billings 到 Usages 的关系,以便我可以获得给定计费率的使用实例列表?有没有has_many, :through我不知道的语法?

再一次,我可能从错误的角度来处理这个问题,所以如果你能想到更好的方法,请说出来!

0 投票
3 回答
5667 浏览

ruby-on-rails - 带有 has_many 的 rails map.resources :through 不起作用?

我有三个(相关的)模型,指定如下:

我希望能够通过路线引用所有的comments_receiveda user- 假设它是为了批量批准所有帖子的评论。(请注意,您也可以comments通过 获得user,但用户无法对自己的帖子发表评论,因此comments通过 apost是不同且互斥的)。从逻辑上讲,这应该适用于:

这应该给我路线

前两个有效,最后一个无效。我已经尝试过,但_无济于事comments_received。我正在寻找一个像

我也尝试过嵌套它,但也许我做错了。在这种情况下,我认为地图将是:

然后网址可能是:

也许这是正确的方法,但我的语法错误?

我在想这个错误的方式吗?对我来说,我应该能够获得所有comments添加到所有用户帖子的页面,这似乎是合理的。

谢谢你的帮助!

0 投票
8 回答
24333 浏览

ruby-on-rails - 带有多个外键的 Rails 模型 has_many

Rails 相对较新,并尝试使用具有名称、性别、father_id 和 mother_id(2 个父母)的单个 Person 模型来建模一个非常简单的家庭“树”。下面基本上是我想做的,但显然我不能在 has_many 中重复 :children (第一个被覆盖)。

有没有一种简单的方法可以将 has_many 与 2 个外键一起使用,或者根据对象的性别更改外键?还是有另一种/更好的方法?

谢谢!

0 投票
9 回答
22112 浏览

ruby-on-rails - 如何避免 has_many :through 关系中的重复?

我怎样才能实现以下目标?我有两个模型(博客和读者)和一个 JOIN 表,它允许我在它们之间建立 N:M 关系:

我现在想做的,是将读者添加到不同的博客。但是,条件是我只能将读者添加到博客一次。所以表中不能有任何重复项(相同readerID,相同blogIDBlogsReaders。我怎样才能做到这一点?

第二个问题是,我如何获得读者尚未订阅的博客列表(例如,填写下拉选择列表,然后可以使用该列表将读者添加到另一个博客)?

0 投票
1 回答
259 浏览

ruby-on-rails - 如何让用户在没有任何用户输入属性的情况下创建 has_many :through 表?

我有两个模型(用户和课程)和一个允许注册课程的 JOIN 表:

注册 JOIN 表具有其他属性,例如成绩、完成百分比等。但是,除了注册之外,没有任何属性需要用户输入。理想情况下,我希望有一个new_course_enrollment(@course, {:user_id => current_user} )链接在后台创建注册(用户无需输入任何内容)并重定向回课程页面,其中“注册”链接替换为“已注册”状态。有没有办法在模型中执行此操作,而无需更改默认的 RESTful Enrollments#new 控制器操作?

0 投票
4 回答
3720 浏览

ruby-on-rails - 如何将字符串传递给 has_many :finder_sql 参数?

在我的应用程序中,用户 has_many 票。不幸的是,tickets 表没有 user_id:它有一个 user_login(它是一个遗留数据库)。总有一天我会改变它,但现在这个改变会产生太多的影响。

那么如何通过登录列建立“user has_many :tickets”关联呢?

我尝试了以下finder_sql,但它不起作用。

我收到一个奇怪的错误:

我还尝试了这个 finder_sql (在登录名周围加上双引号):

但它以同样的方式失败(无论如何,如果它有效,它将容易受到 sql 注入的影响)。

在一个测试数据库中,我在门票表中添加了一个 user_id 列,并尝试了这个 finder_sql:

现在这工作正常。显然,我的问题与我尝试使用的用户列是字符串而不是 id 的事实有关。

我在网上搜索了很长时间......但找不到任何线索。

我希望能够将任何参数传递给 finder_sql,并编写如下内容:

编辑:我不能使用 has_many 关联的 :foreign_key 参数,因为我的 users 表确实有一个 id 主键列,在应用程序的其他地方使用。

编辑#2:显然我没有足够彻底地阅读文档:has_many 关联可以采用 :primary_key 参数来指定哪一列是本地主键(默认 id)。谢谢丹尼尔让我大开眼界!我想它回答了我原来的问题:

但我仍然很想知道如何使 has_many :tickets_since_subscription 关联工作。

0 投票
4 回答
32688 浏览

ruby-on-rails - Rails has_many :通过连接模型中的额外属性查找

Ruby 和 Rails 都是新手,但我现在受过书本教育(这显然没有任何意义,哈哈)。

我有两个模型,事件和用户通过表 EventUser 加入

这个项目是一个日历,我必须在其中跟踪人们注册并为给定事件刮掉他们的名字。我认为多对多是一个好方法,但我不能这样做:

因为事件实际上没有额外的数据,所以 EventUser 模型有。虽然我可以做到:

这似乎与“铁轨方式”相反。谁能启发我,今晚(今天早上)这一直困扰着我很长时间?

0 投票
4 回答
5390 浏览

ruby-on-rails - 优雅地从 has_many 中选择属性:通过 Rails 中的连接模型

我想知道从 has_many :through 关联中的连接模型中选择属性的最简单/最优雅的方法是什么。

假设我们有具有以下 Item 类的 Items、Catalogs 和 CatalogItems:

此外,假设 CatalogueItems 具有位置属性,并且任何目录和任何项目之间只有一个 CatalogueItem。

检索位置属性的最明显但有点令人沮丧的方法是:

这很烦人,因为我们似乎应该能够做到@item.catalogs.first.position,因为我们已经完全指定了我们想要的位置:对应于@item 目录的第一个位置。

我发现得到这个的唯一方法是:

现在我可以做 Item.catalogs.first.position。但是,这似乎有点像 hack - 我正在向 Catalog 实例添加一个额外的属性。它还开辟了尝试在两种不同情况下使用视图的可能性,其中我使用 Catalog.find 或 @item.catalogs 填充 @catalogs。在一种情况下,职位会在那里,而在另一种情况下,它不会。

有没有人对此有很好的解决方案?

谢谢。