问题标签 [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.
sql - has_many 的索引:通过
假设您有两个模型,用户和城市,由第三个模型 CityPermission 连接:
目前,我使用以下迁移代码片段创建连接表和表的索引:
这些是要创建的最佳索引吗?这些索引是否允许通过连接表来回快速访问,以及在表本身内快速查找,还是有其他更好的方法?以不同的方式重申这一点,这些索引,给定city
并且user
是类 City 和 User 的实例变量,是否允许city.users
、city.city_permissions
、user.cities
和user.city_permissions
都表现得同样好?
jquery - rails: 如何通过 jQuery 更新 has_many :through 关系?
抱歉,如果这是一个无聊的问题,但我刚刚开始使用 Rails 和 jQuery。我有以下情况:
我有 3 个课程:contacts
和companies
( contact_company_joins
ccj)。对于我创建的所有三个类models
,controller
和views
。显然,联系人和公司是通过连接表 ccj 连接的(使用has_many :through
)。
contacts <-> contact_company_joins <-> companies
在我的联系人的“显示”视图中,我想显示一个表格,列出联系人所连接的所有公司(以及公司本身的一些附加信息,例如电话号码)。在我的公司看来,我也想做同样的事情,但这次是员工(联系人)的详细信息。表格的每一行最后都有一个典型的“删除”链接,我现在已经将它的函数连接到我的一个 jQuery 函数:
在两个视图(联系人和公司)中,删除操作将我带到 ccj 控制器的销毁功能。我现在要做的是更新或重新呈现调用删除函数的单个站点(联系人或公司)的表,但只更新表的一部分。我想我必须在上面的“成功”功能中实现它?但是话又说回来,即使我从 ccj 的控制器返回一些东西(呈现的部分?)......对于联系人和公司视图来说,这将是相同的,对吗?如何确保在我的 Ajax 调用销毁 ccj 对象之后,我为我的联系人视图(这将是一个新的公司表)获得一个新的 DOM 对象,但在我从我公司的看法?
希望这一切都有意义:-)
问候,
塞巴斯蒂安
ruby-on-rails - 是否可以在rails中有一个复合外键?
假设以下数据模式:
在此示例中,假设我有多个资源,每个资源都可以以多种方式使用。例如,一个资源是widget
. Widgets
可以foo
编辑,他们可以bar
编辑。 Gizmo
s 也可以foo
ed 和bar
ed。这些使用类型按不同的费率计费,甚至可能针对不同的客户使用不同的费率。每次使用(资源)的出现都记录在使用表中。每个计费费率(针对客户端、资源和类型组合)都存储在计费表中。
(顺便说一句,如果这个数据模式不是解决这个问题的正确方法,请提出建议。)
是否可以使用 Ruby on Rails 和 ActiveRecord 创建has_many
从 Billings 到 Usages 的关系,以便我可以获得给定计费率的使用实例列表?有没有has_many, :through
我不知道的语法?
再一次,我可能从错误的角度来处理这个问题,所以如果你能想到更好的方法,请说出来!
ruby-on-rails - 带有 has_many 的 rails map.resources :through 不起作用?
我有三个(相关的)模型,指定如下:
我希望能够通过路线引用所有的comments_received
a user
- 假设它是为了批量批准所有帖子的评论。(请注意,您也可以comments
通过 获得user
,但用户无法对自己的帖子发表评论,因此comments
通过 apost
是不同且互斥的)。从逻辑上讲,这应该适用于:
这应该给我路线
前两个有效,最后一个无效。我已经尝试过,但_
无济于事comments_received
。我正在寻找一个像
我也尝试过嵌套它,但也许我做错了。在这种情况下,我认为地图将是:
然后网址可能是:
也许这是正确的方法,但我的语法错误?
我在想这个错误的方式吗?对我来说,我应该能够获得所有comments
添加到所有用户帖子的页面,这似乎是合理的。
谢谢你的帮助!
ruby-on-rails - 带有多个外键的 Rails 模型 has_many
Rails 相对较新,并尝试使用具有名称、性别、father_id 和 mother_id(2 个父母)的单个 Person 模型来建模一个非常简单的家庭“树”。下面基本上是我想做的,但显然我不能在 has_many 中重复 :children (第一个被覆盖)。
有没有一种简单的方法可以将 has_many 与 2 个外键一起使用,或者根据对象的性别更改外键?还是有另一种/更好的方法?
谢谢!
ruby-on-rails - 如何避免 has_many :through 关系中的重复?
我怎样才能实现以下目标?我有两个模型(博客和读者)和一个 JOIN 表,它允许我在它们之间建立 N:M 关系:
我现在想做的,是将读者添加到不同的博客。但是,条件是我只能将读者添加到博客一次。所以表中不能有任何重复项(相同readerID
,相同blogID
)BlogsReaders
。我怎样才能做到这一点?
第二个问题是,我如何获得读者尚未订阅的博客列表(例如,填写下拉选择列表,然后可以使用该列表将读者添加到另一个博客)?
ruby-on-rails - 如何让用户在没有任何用户输入属性的情况下创建 has_many :through 表?
我有两个模型(用户和课程)和一个允许注册课程的 JOIN 表:
注册 JOIN 表具有其他属性,例如成绩、完成百分比等。但是,除了注册之外,没有任何属性需要用户输入。理想情况下,我希望有一个new_course_enrollment(@course, {:user_id => current_user} )
链接在后台创建注册(用户无需输入任何内容)并重定向回课程页面,其中“注册”链接替换为“已注册”状态。有没有办法在模型中执行此操作,而无需更改默认的 RESTful Enrollments#new 控制器操作?
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 关联工作。
ruby-on-rails - Rails has_many :通过连接模型中的额外属性查找
Ruby 和 Rails 都是新手,但我现在受过书本教育(这显然没有任何意义,哈哈)。
我有两个模型,事件和用户通过表 EventUser 加入
这个项目是一个日历,我必须在其中跟踪人们注册并为给定事件刮掉他们的名字。我认为多对多是一个好方法,但我不能这样做:
因为事件实际上没有额外的数据,所以 EventUser 模型有。虽然我可以做到:
这似乎与“铁轨方式”相反。谁能启发我,今晚(今天早上)这一直困扰着我很长时间?
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。在一种情况下,职位会在那里,而在另一种情况下,它不会。
有没有人对此有很好的解决方案?
谢谢。