如何在 Rails 中为多对多关系(和中间表)做一个选择字段?

Posted

技术标签:

【中文标题】如何在 Rails 中为多对多关系(和中间表)做一个选择字段?【英文标题】:How to do a select field in Rails for a many-to-many relationship (and intermediary table)? 【发布时间】:2010-12-14 06:24:12 【问题描述】:

尝试为管理界面做一个选择字段。

我所拥有的不是传统的多对多关系,但我想原理是一样的。我有一个“Event”模型和一个“EventRelation”模型……每个 Event 可以有很多子事件,还有一个主要事件……所以 EventRelation 有 primary_event_id 和 sub_event_id 字段。

如何创建一个允许我为任何给定事件指定 primary_event 的选择字段?

相关型号代码:

类事件 'primary_event_id', :class_name=>'EventRelation' has_one :primary_event_relation, :foreign_key=>'sub_event_id', :class_name=>'EventRelation' has_one :primary_event, :through=>:primary_event_relation, :foreign_key=>"primary_event_id" has_many :sub_events, :through=>:sub_event_relations, :foreign_key=>"sub_event_id" 结尾 类 EventRelation '事件', :foreign_key=>"primary_event_id" belongs_to :sub_event, :class_name=>'Event', :foreign_key=>"sub_event_id" 结尾

【问题讨论】:

【参考方案1】:

我会使用像Formtastic 这样的插件来实现这一点,因为它支持内置在可靠的替代表单处理程序中的各种形式的 ActiveRecord 关联。只需确保您使用最有效的连接执行适当的查询或为您的模型包含选项,这样您的视图就不会在通过关联工作时导致不必要的数据库查询。

【讨论】:

【参考方案2】:

正如 James 所说,Formtastic 是实现这一目标的好方法。还有两个很棒的railscasts 告诉你如何使用它。

【讨论】:

以上是关于如何在 Rails 中为多对多关系(和中间表)做一个选择字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 4 中为多对多关联制作带有子表单的表单?

在 Sequelize.js 中为多对多关系添加默认角色

如何在不破坏范式的情况下为多对多关系构建连接表

将表拆分为多对多关系:数据迁移

如何在 Django REST 框架中为多对多字段定义“IsOwner”自定义权限?

在 Django 中为多对多字段冲突反向访问器和查询?