【问题标题】:Confusion on one_to_many relationships Rails对 one_to_many 关系的困惑 Rails
【发布时间】:2016-07-18 14:34:21
【问题描述】:

我对如何为一个菜单项分配多个标签感到困惑。

如果我有一个名为“Tacos”的新菜单项,我希望该菜单项具有“Spicy”和“Protein”标签。

同样,如果我有一个名为“牛排”的新菜单项,我想将相同的“蛋白质”标签应用到该项目。这可能吗?

class MenuTag < ActiveRecord::Base
  belongs_to :menu_item
end

class MenuItem < ActiveRecord::Base
  has_many :menu_tags
end

food_one = MenuItem.new(name: "Tacos", tags: NOT SURE WHAT GOES HERE???)
food_two = MenuItem.new(name: "Steak", tags: NOT SURE WHAT GOES HERE???)

spicy = MenuTag.new(name: "Spicy", menu_item_id: 1)
protein = MenuTag.new(name: "Protein, menu_item_id: 1,2) <---- can I assign two id's here???

【问题讨论】:

  • 你想要的被称为拥有和属于多(HABTM)关系。并且有两种方法可以在 Rails 上实现它。知道您知道名称应该更容易找到正确的文档。
  • 你不认为你在做一对多的反面吗?如果一个菜单项有很多标签,那么如何为一个标签传递两个菜单项 ID?
  • 那么这应该是多对多吗?

标签: ruby-on-rails tags one-to-many


【解决方案1】:

你如何使用它:

food_one = MenuItem.create(name: "Tacos", menu_tags: [menu_tag_1, menu_tag_2, ...])
food_one.menu_tags.create(name: "Spicy")

或者反过来:

MenuTag.create(name: "Protein", menu_item: food_one)# using instances
MenuTag.create(name: "Protein", menu_item_id: food_one.id) # using ids

注意:在与它们相关之前,您需要创建一个项目。

【讨论】:

  • 感谢@RaVeN。我仍然很困惑如何分配多个实例? food_two = MenuItem.create(name: "Steak") MenuTag.create(name: "Protein", menu_item: food_one, food_two)
猜你喜欢
  • 2023-04-06
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2020-12-20
  • 1970-01-01
  • 2014-11-02
  • 2021-11-28
相关资源
最近更新 更多