【问题标题】:Rails - adding new record to all Models at onceRails - 一次向所有模型添加新记录
【发布时间】:2013-07-30 23:38:28
【问题描述】:

假设我有一个名为 Building 的模型和另一个名为 Issue 的模型。

Issuebelongs_toBuilding

Buildinghas_manyIssues

我有多个Buildings,还有很多Issues。现在,我必须一次将每个问题添加到每个建筑物中。

如何同时将一个Issue 添加到所有Buildings

【问题讨论】:

  • 假设所有建筑物都有相同的问题,x。如果将一个 x 问题更改为 y,是否所有建筑物的问题都更改为 y?
  • 是的,我认为它应该是这样工作的。

标签: ruby-on-rails database models


【解决方案1】:

似乎您在两个模型中都需要has_and_belongs_to_many 关系。并为此创建一个表:

rails g migration create_buildings_issues building_id:integer issue_id:integer

编辑迁移以删除自动索引并添加复合索引:

create_table :buildings_issues, index: false do |t|
  t.references :building
  t.references :issue
end
add_index :buildings_issues, [:building_id, :issue_id]

然后在 DB 中创建这个表:

rake db:migrate

然后您可以将问题添加到多个建筑物:

any_issue.buildings << Building.all

或向任何建筑物添加问题:

any_building.issues << heat_issue

【讨论】:

  • 这个有道理,我去试试。我想补充的一个难题是:我还希望能够将单个Issues 添加到Buildings。换句话说,如果我还想将“Heat”作为问题添加到“Building 3”而不是所有其他建筑物,我可以通过 has_and_belongs_to 关联来做到这一点吗?
  • 你的items代表issues吗?还是实际上应该是items?我有点困惑items 来自哪里
  • 谢谢。迁移工作,但现在我无法弄清楚如何显示与之相关的建筑物名称。例如,在我通过@issue.building.name 展示建筑物之前。现在它给了我错误undefined method "building" for #&lt;Issue:0x007fc29cb28980&gt;。有什么想法吗?
  • 对,你不再有building,你有buildings,因为这个问题与许多建筑物有关。
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2014-05-15
相关资源
最近更新 更多